I have a Skeleton animatronic band created years ago for Halloween using Scott Edwards SSC - The boards finally died after 12 years. I have switched to Pololu Maestro 24
The band comprises a drummer, Keyboards, guitar and Singer
I designed an app In VC++ 6.0 – currently compiled in Visual Studio 2010 and motion script command files synced for over 20 songs
(So Needless to say I don’t want to use your scripting system and Halloweens coming)
I found some of the Raw commands I need In Documentation to incorporate into my app
Set Position ( I’m using Mini SSC limits – My old script supports this)
Set Acceleration – Very Nice (I used to do it internally using multiple set position commands computed on a curve at 50 ms intervals at full speed — Very Jerky)
Set Speed Also Very Nice (Same as the last -but without the curve Jerky to say the least)
The above are Duck Soup in my app – but I also need to set the low and high boundarys (or the SSC midpoint and ± range) as I operate some servos beyond the preset range
Are these functions Board Settable or Internal to the Maestro control center App – I hope its the former
A simple list of all user commands would be nice with raw byte values as in the few commands included in the documentation
Your included apps are far to fat and my eyes are bleeding trying to dig through them for the code bytes or the required code
I Have used the Maestro Control Center to set these values – and run my app at the same time – all seems well but I’m detecting choking.
I’m reasonably certain your control center is using GetPosition a lot and as I am sending a considerable number of “Move” commands it will probably choke --also for elegance I want it all controlled from my app and have no need for board feedback, and if I can set these limits without the Maestro Control Center for that App also
Well thanx for any help FAllen
All the commands for the Maestro’s serial interface are listed in the Maestro User’s Guide. The Maestro Control Center, UscCmd, and the examples we have in the Pololu USB SDK all use the native USB interface, which has a different set of commands.
The serial interface does not have any commands for changing the persistent parameters on the Maestro, such as the min, max, 8-bit neutral, and 8-bit range values for the channels. I don’t know how your code and animations are structured, but would it be possible for you to store the 8-bit neutral and 8-bit range ahead of time in the Maestro Control Center instead of trying to set them at runtime with your Visual C++ application?
Alternatively, if you need the ability to change the min and the max at runtime, you could emulate it in the Visual C++ app. I am imagining you would have an object for each channel that stores ints for the current 8-bit neutral and 8-bit range, and has functions for changing those parameters. Then to move a servo you could call a setTargetMiniSSC function on that object that takes a number from 0 to 254, converts it to quarter-microseconds using the stored parameters, and then sends a Set Target (compact protocol) command to the Maestro.
By the way, the only reason I can think of for sending Mini SSC commands to the Maestro would be for compatibility with your older code. Maybe you could convert all your code to use Set Target (compact protocol) and then you can benefit from the Maestro’s quarter-microsecond resolution.
We would love to see some pictures and videos of your animatronic band once you get it working!
or to simplify – create 24 x 2 array of ints — low ,high vals for each channel
then set target position = ((high-low) * requestedpos)/254)+low
And use compact protocol Set Target – Okay easily doable and I feel a bit dumb –
Only possible problem is compact protocol sends 4 bytes instead of (mini ssc) 3 but I am sending fewer commands per 20th sec (Using set Speed and Set Acceleration vs the old code mess I cobbled up on the Scott Edwards board)
Of course this only works if there are no onboard min max values on the chip (or in the driver) and they are only present in the Maestro control center
Was I right about the continuous Get Position Calls in Maestro control center or am I all wet
The band is running at present with Maestro Control Center running and Animator(My App) – seems inelegant
Well thanx for the help – Its fixable now
The Min and Max values that you set in the Maestro Control Center are in fact stored on Maestro. You might need to adjust those values so that the Min is smaller than any value you would want to actually send to the servo and the Max is higher than any value you would want to actually send to a servo.
The Maestro Control Center does continuously fetch the servo positions and more, but it uses a native USB request to get all the data at once instead of using a serial Get Position command.
Yes I spotted the “clipping” and have widened the ranges in the Control center. But of course the Maestro Control center is still using up line transfer capacity. So I’ll boot Maestro Control Center first – let it set the ranges. Close it. then boot my app.
In my tests the range settings persist – so I guess Maestro Control Center doesn’t reset the chip to any defaults on exit.
As to quarter second control – that would involve rebuilding my script files with more position selections --I really don’t want (or need) finer resolutions – the kids (and adults) are enthralled as is.
Well – I’ve got it all under control --Thanx for your all your time.
Since the Min and Max settings are stored on the Maestro, you would only need to use the Maestro Control Center to change those settings; you don’t need to use it every time you run your project. --David