SSC32 and Sequencer

Hi to everybody,
I’m new to this forum and wanted to wish you the best. :slight_smile:
Well, I have a project, those ones you have since you were young, and now it’s time to realize it :slight_smile: Just want to build an animatronic, a simple one of course.

I was thinking about a SSC-32… I’m amazed by the skills of this board, and the sequencer is an important tool for driving servos.
Unfortunately there’s no a demo of this software so I will ask the community for a question:

Is there a way to simulate the concepts of ease in/out for movements ? I’m a 3d Digital Graphic Designer and I’m used to use these techniques for having a smooth stop slowing down speed, or a smooth acceleration for starting movements. So I thought that the body won’t “shake” when stop movement of an arm for example.

thank you very much for help.

The short answer is yes.

In my opinion how the SSC32 can control servo movement is nothing short of amazing. I’ve written several programs to interface with the SSC32 and so have others on the forum.

The manual describes the commands that I’ve implemented in the one application available here.
otherrobots.com/Tutorials/SSC32ServoControllerSoftware/tabid/58/Default.aspx
You can control up to 32 servos.
Manual is here.
lynxmotion.com/images/html/build136.htm

Oh yes thank you, I saw it… it’s a very useful utility! It’s a sequencer like… :smiley:
I’m trying to plan if it is possible to obtain some kind of movements, sinche the chassis will be light than the usual metal ones.

It will be important to slow donw movements before stop them otherwise the animatronic will have a “dangerus” swing effect. :confused:

Then I will study where put more weight to make it stable. It won’t probably walk, no need to make it walk, but if needed it will be able to move legs.

I think that in futre I will need a second SSC-32 to have more controls, and i was wondering if it is possible to connect them together or have a synch between them. I don’t think that sequencer will be able to handle them at once. Si my question is: Is it possible to have two istance of sequencer targeted to 2 different coms ? Maybe two bluetooth ones ?

I have two SSC32’s each has a BlueSMiRF bluetooth modem for wireless operation. They each end up on a different comm port. You could run two copies of the program above, each pointed at a different comm port. I could probably write an app that would reference two comm ports at the same time but haven’t done so.
lynxmotion.com/images/html/build117.htm
otherrobots.com/Tutorials/BluetoothModemBlueSMiRFSetup/tabid/60/Default.aspx

:smiley: So what I can say, I’m a fan of you :slight_smile: well I saw this tutorial, and it is one of the thing that push me to buy SSC32.

But if I want two devices SSC32 I need two BT USB adapter right ? But 64 channels will be really a good thing.

Of course a custom utility that let you address to different com will be great especially if in only one script it is possible to addressing servos of both coms… I mean, 0-31 of com2 and 31-63 of com3 etc…

I’ve tested the app made to control the Hitec Robonova… really interesting the way of defining keyframes, ghosting, and automatic inbetweens, which are used in graphic animations, but no ease in/out, and of course it is possible to drive only Hitec boards.

:slight_smile: However… your app is great… :smiley:

I’ve used a similar technique operating an iRobot Create. As sensors detect that I’m approaching an object I slow down and turn, if the sensors don’t detect any objects I continue to accelerate until reaching a max defined speed. If you don’t use a technique like that you can easily pop a wheelie and dump any cargo you might be carrying! The same logic could be applied to the start of a motion and the end of a motion. I haven’t done much with animatronics but, using a similar technique, it could be accomplished with an SSC32.

That’s how I would do it. Not sure if you could link two boards together and only use one modem.

That would probably be a neat app to write. If I modified the app to have another column (comm port number) I could then loop through the commands sending the command to the appropriate comm port, each comm port handling 32 servos. The application could then control an unlimited number of servos, just keep adding SSC32’s!

In this project I don’t need the animatronic carrying objects or interact width weights. It must do movements just for a “show”. I’ve read some info from the manual, and the ease in/out must be “simulated” by reducing speed step by step. So to reach a certain angla, I need to “subdivide” the time using some sinusoidal curve, and reduce the speed to reach 0, or vice versa when a movement starts.

What I need to check is if is there some utility that converts a MoCap file ( Motion capture ) into angle values for joints. It would be nice then to write an app to convert Mocap files to SSC32 scripts to send through com port…

However, I will start with SSC32, 11 servos ( a simplified hand with 3 fingers and a thumb, and the wrist ) , and the sequencer… I will of course try your app also… :slight_smile: It is interesting the possibility to read XML files… :slight_smile: great work!

I’d like to come up with XML formats that could be created and played in various programs. I’d like to create a player program that could play multiple XML files. That way each file could perform a certain pose (one maybe a head turn, the other a walk, one a turn). By stringing them together one could perform several pre-made motions that could be mixed and matched or randomly played. You could even play different xml files based on sensor inputs. If you created one file to ease in, the other to ease out. You could then string them together to get your motion.

I did hook up a light sensor to the SSC32 and use it to actuate a gripper. More light opened it. Less light closed it.
lynxmotion.com/Product.aspx?productID=677&CategoryID=133
The reason I mention it, is that you could buy a couple of Force Sensing Resistors and press on them to increase or decrease speed of your servos. You could then record it into an xml file and play it back to get your motions. Might be a fun experiment.
lynxmotion.com/Product.aspx?productID=627&CategoryID=133

Those are interesting… :slight_smile:

Not really a demo, but it shows how to use it…

lynxmotion.com/images/html/build128.htm

Wow, a good example guide!!! Thank you very much!

Uhm, I was reading the manual of SSC-32, and the command format for driving servos…

I noticed the cr command… does this close the string and execute command right ? this means that if I send to com port these commands with different connections from an app and the com port:

#1 P1600
then
#2 P1600
then
#3 P1600
then
#4 P1600
then
S750

is the same of sending in only one connection:

#1 P1600 #2 P1600 #3 P1600 #4 P1600 S750

Right ?
This will help me in finding a way to write a custom app for drive my animatronic… I’m figuring out how to implement some ease in out processing on a movement.

Yes that’s how it works.

Hi, I was just playing around some theory…
Just obtaining a multiplier to apply to speed or time during some steps of a movement.

Think about sin and cos functions

We can assume that at a start of a movement we can use alpha angle 0 and at the end we can use alpha angle 180

So, if we calculate a multiplier, we can apply it to speed used to reach a particular position, or to apply to time (which can be less or not) to reach a position.

Let’s check the speed case:

sin function
at alpha 0 = 0,
at alpha 90 = 1 and
at alpha 180 is 0 again…

so if we multiply this value for the maximum speed we want, we will have the value increasing to the half of movement and decrease progressively until the end of movement.

we need to calculate the angle increment for a step… so if we want a resolution of 10 step we will have an angle of 180/10 = 18 degree for a step.

so a command may result like this in a pseudo code:

#1 P ( angle = angle + step ) S ( maxspeed * mult i )

where
angle is the angle value from start position to end position of servo
step is the delta angle position / 10 ( for servo steps )
mult i = sin ( angle for multiplier = angle for multiplier +18 )

I have just a question… does the SSC32 execute a command and wait until it has been “finished” before accepting another one ?

I mean, Is there a buffer where the commands are stored and then read sequentially or I need to implement some waiting cycle ?

To my knowledge, there are no wait or delay functions in the ssc-32. It executes commands when received. If you need a wait or delay before executing another command, it needs to be handled in the pc or microcontroller sending the commands to the ssc-32.

The SSC-32 can accept commands at any time. It will not act on any command until it receives a carriage return. You can send a move command then query the SSC-32 to see if the move is still in progress. Then send a new move when it’s complete. This will add a little (~20mS) delay in between movements though.

The SSC-32 with GP firmware also has two built in sequencer engines. These can be told to run any of the stored sequences in a specific speed and direction. Hope this helps.

How do you qwery the SSC-32? This would be helpful for me.

Yo Mike, RTFM lol

lynxmotion.com/images/html/build136.htm

Just kidding…

[code]Query Movement Status.

Example: "Q "

This will return a “.” if the previous move is complete, or a “+” if it is still in progress.

There will be a delay of 50uS to 5mS before the response is sent.
[/code]