Exporting VSA show to Maestro

Hello,

I’m currently working on an animatronic Santa head to put on display with christmas.
I did a lot of research for this project and went with a Pololu Maestro 6 to drive my servo’s.

Since i will be syncing the movement to audio VSA https://www.brookshiresoftware.com/vsa_overview.htm was the perfect solution for this. Controlling my show live on pc works perfectly. However, i want to export this show to a sequence that can run on the Maestro itself which will be triggered by an Arduino. Does anyone know if this is possible?

Thanks in advance!

Hello.

I am not familiar enough with the VSA software to know if it is possible to export a VSA routine to an Arduino, but you might try looking into the RAPU board from Brookshire Software. Their website describes it as a as a “plug-and-go replacement for the PC”.

By the way, your project sounds really neat! If you are willing to share more about it, you might consider posting about it in the “Share your projects” section of the forum; I am sure other members here would appreciate it, too.

Brandon

I’m trying to replicate a ripple caused by a water drop with a set of 8 rings cut out of aluminium sheets and a sphere somewhat like this


but I don’t want to have this continuous motion. I want separate control on each of this rings so that i can replicate the ripple effect caused by a single drop. also my project will be mounted on a wall so I’ll not have gravity working for me unlike the mechanism in the video. So i’m working with 17 servos (2 per ring and 1 for the droplet). VSA and pololu set up works perfectly for me but i need to trigger it without a PC. RAPU seems to be the perfect solution but its out of stock currently. any suggestion/work around?

We do not have any specific recommendations for replacing the RAPU. You might try contacting its manufacturer, Brookshire Software, to see if they have any advice.

By the way, your ripple effect project sounds pretty exciting! If you have pictures, video, or a write up, we would love to learn more about it on the Share Your Projects part of our forum.

-Jon

so I’m left with 2 choices

  1. to create a frame by frame sequence from the control center and export the sequence to script

  2. write a script from scratch.

I’m an animator/puppeteer and I mostly use the Maestro through VSA. I’m absolutely new to scripts in any format. I’d prefer to create a frame by frame sequence in control center rather than writing it from scratch.

Following are the problems I’m facing while trying to create this sequence, frame by frame, in control center

  1. I’m trying to create a ripple effect caused by a single drop. I have somewhat managed to achieve it on one ring by gradually diminishing the target value and delay of the servo over a few frames. If i can create this as a sequence and copy it across the rings with a lag of 200-300 microseconds, I think it’d look pretty convincing as a ripple effect. is there a way to do that.can I use the ‘copy all sequence to script’ button for this

2.if i specify speed and acceleration in the status tab,it runs fine when I play it from Play Sequence button in the Sequence tab but when I copy the sequence to script, it doesn’t play as per the set speed.

I have also started reading the scripting guides and the sample scripts are starting to make sense…I might give it a shot if it’s absolutely impossible to do it otherwise

attaching a video of the project…the platform will be mounted on a wall so it won’t be horizontal like it is now. and the rings will be attached to a pair of these sticks. I’ll use a splitter cable to send the signal to a pair of servos

I numbered my responses to your questions:

  1. You could use the “Copy all Sequences to Script” button to add your sequences as subroutines to the current script. You could also use the “Copy Sequence to Script” button to create a script that is a looped version of the selected sequence. Either of those options would help you load that sequence into your script, which is a good starting point to begin editing and customizing your script for the lagging behavior you want.

  2. Can you verify that you are clicking Apply Settings at the bottom right of the Maestro Control Center after you have entered the script you want to load onto the Maestro under the Script tab? The “Speed” and “Acceleration” values in the “Status” tab are reset to the values specified under the “Channel Settings” tab for each servo whenever the Maestro resets (this happens every time the “Apply Settings” button is pressed). Note that the “Speed” and “Acceleration” inputs on the “Status” tab of the Maestro Control Center allow the speed and acceleration of individual servo channels to be adjusted in real-time but do not persist (these values can also be changed from a script using the speed or acceleration commands). If you do not need to change those settings while your program is running, you can configure each channel’s default settings in the Channel Settings tab.

-Jon

This ripple effect project is part of a kinetic art installation that I’m working on for an exhibition and I’m working against a tight deadline. So thanks a ton for the prompt response.

Your definition of the ‘status’ tab and ‘Channel setting’ tab helped a lot and you are spot on about pressing the “apply settings” button. I was only doing it while exporting the code to the maestro but not after changing the channel settings.

After setting the speed and acceleration in the ‘channel settings’ tab I’m getting much better results. But ideally I’d like to gradually reduce the speed as the pitch of the wave starts reducing.

So now I have managed to successfully export one sequence at a time to the Maestro board and it’s running without the computer…

Now I’d like to record a sequence for each ring and play all them simultaneously but with a slight lag of 200-300 milliseconds, starting from the centre and radiating outwards.

I’m glad you are making progress!

In case you do not already know, the speed and acceleration of each Maestro channel can be modified with the SPEED and ACCELERATION scripting commands, which are described under the “Command Reference” section of the Maestro’s user’s guide. The user’s guide can be found under the Resources tab of the Maestro’s product page.

Note that those functions set the speed and acceleration for all subsequent movements on the associated channel until otherwise changed or the device is reset (i.e. it is not a temporary function to change the speed or acceleration for only the next movement).

-Jon

thanks to you, I’m plunging deeper and deeper into scripts… ‿︵‿︵‿︵‿ヽ(°□° )ノ︵‿︵‿︵‿ HELPME ‿︵‿︵‿︵‿ヽ(°□° ) …

Ready to do whatever it takes, to make this damn thing work… :sweat_smile:

So now I, have reached here…
I can now control the movement of the servos and speed of channels through script and the ‘get_moving_state’ command is ensuring a smooth and continuous motion…Don’t think i need acceleration here.

I have made a sequence for each servo routine, ‘sequence_a’ and ‘sequence_b’ and made subroutines out of these sequences. I don’t know if it’s the right use of subroutines

I did it hoping i could initiate ‘sequence_b’ right after ‘sequence a’ after a specific ‘delay.’ But it wont start playing ‘sequence-b’ till it completes ‘sequence_a’ also for some reason its playing sequence _b’ twice.

Now, how can I initiate subsequent sequences after a defined lag of say 300 ms but not waiting for the previous sequence to complete before moving to the next one. each of my sequence is for a separate servo on a seperate channel…so,I’m sure this can happen through script.

STUCK…Please help

here’s how my script looks now


80 0 speed
80 2 speed

begin 
sequence_a
3000 delay
sequence_b
repeat

sub sequence_A

  6000 0 servo 
  moving_wait
  8000 0 servo 
  moving_wait
  4000 0 servo 
  moving_wait
  8000 0 servo 
  moving_wait
  4000 0 servo 
  moving_wait
  8000 0 servo 
  moving_wait
  4500 0 servo 
  moving_wait
  7500 0 servo 
  moving_wait
  4750 0 servo 
  moving_wait
  7000 0 servo 
  moving_wait
  5000 0 servo 
  moving_wait
  6750 0 servo 
  moving_wait
  5250 0 servo 
  moving_wait
  6500 0 servo 
  moving_wait
  5500 0 servo 
  moving_wait
  6250 0 servo 
  moving_wait
  5750 0 servo 
  moving_wait
  6000 0 servo 
  moving_wait
 

Sub sequence_B
  
  6000 2 servo 
  moving_wait
  4000 2 servo 
  moving_wait
  6000 2 servo 
  moving_wait
  4000 2 servo 
  moving_wait
  6000 2 servo 
  moving_wait
  4000 2 servo 
  moving_wait
  6000 2 servo 
  moving_wait
  4000 2 servo 
  moving_wait
  6000 2 servo 
  moving_wait
  4000 2 servo 
  moving_wait
  6000 2 servo 
  moving_wait
  4250 2 servo 
  moving_wait
  5750 2 servo 
  moving_wait
  4500 2 servo 
  moving_wait
  5500 2 servo 
  moving_wait
  4750 2 servo 
  moving_wait
  5250 2 servo 
  moving_wait
  5000 2 servo 
  moving_wait



sub moving_wait
  begin
    get_moving_state
  while
    # wait until it is no longer moving
  repeat
  return

The Maestro could be programmed to run sequences concurrently, though it would not work as you described. You have to avoid using the delay command or any other blocking code. It would also not be trivial to implement. You can find an example that shows how it can be done in this post.

Alternatively, it might be easier for you to change your approach and rewrite your script so that it merges together the servo commands from your subroutines into one. Your script could do something like: start with the innermost servo, command it to move to a specific position, delay a small amount of time, command the next outermost servo to a specific position, and so on in order to propagate the wave motion outward. Those small delays in between the movement of the rings can then be updated for every loop.

-Jon