RTMCS


The following is general information on the New Real Time Motion Control System and Mini servo control board.


I have designed a new 4 channel programmable servo control board, the entire board is less then 1 square inch and should fit perfectly into a tail or any other animatronic application.

I decided on 4 channels cause that seems to be a good common denominator to break things into.

Eyes: (left/right) (up/down) (left eye lid) (right eye lid)

Ears: (forward/back) (left/right) (rotateCW/rotateCCW) (Deform/Normal)

Tail: (up/down) (left/right) (spare) (spare)

Etc...

If you need more then four servos you can always network a bunch more servo boards together, or if you need 16 servos per board then you can use the bigger servo controller.

The bigger boards where developed for the TaunTaun project, but they are a bit large to go in a tail.  

If you need a simpler stand alone user programmable control board.  The Mini Tail Servo Controller is what you want. It can be 100% programmed from the buttons, with out the use of a PC or any other programs.


The key features for the new servo control board based on the Atmel ATMEGA32 (note: Atmel has now released the ATMEGA64 in the 44 pin TQFP, so I will get some in and start using them for this project):

32K flash (the old micro had only 2K of flash)  note: ATMEGA64 has 64K of flash

16 Mhz (the old micro ran at 10 Mhz) note: ATMEGA64 runs at 20 Mhz

4 channel 16 bit servo resolution (the old micro was 10 bit)

5 digital I/O (8 digital I/O if not using the inter board communications port)

Inter board communications port (3 wire SPI )

External communications port (RS-232 level converter, built in DE9 connector)

Battery and micro voltage monitoring (tails can wag less as the battery dies)

Random event generator  


The new mini servo board will work with my new RTMCS (Real Time Motion Control System), this allows anyone to create motion sequences and then assign then to a button event.  i.e. slow wagging (sine wave, or any motion sequence) when you press button 1 or tail flick when you press button 2, etc... Also, you can assign motions to the random event generator, so it can randomly chose different wags and motions.

This is a work in progress, and it is slowly starting to take shape, but there is still much to do before it can be released to the public....


This is the current progress on the RTMCS:

In this zoomed in pic (see that last pic on this page, for the unzoomed version), the different colored lines represent each of the 4 servos, the dots are points that the servo will move to at that time instance.

Some times its a good idea to limit the travel of a servo, because the armature could suffer damage, i.e. an eye lid, once it is fully closed you don't want to keep driving it more closed.

For this reason, the first thing you should do is set the servo travel limits. Once set the visual screen will be scaled such that all the height of a point is the servo position, all the way up is full CCW, center is center, and all the way down is full CW. 

The yellow line can scroll around and update the servos real time, and if you move the points on the yellow line then that servo will move real time. This lets you create "key frames" for your motion sequences. (If you have one of the function generators open, then moving around the servo will fill in the data for the function).

After you have a few "key frames", then you can use the function generators to finish the rest of the motion sequence for you. (you don't need key frames you can just move all the points on the screen, or create/delete points on the fly if you wish)

Currently the following function generators have been written:

Linear (used to add points, create linear slopes, step functions, etc...)

Results of adding linear function (servo 2, 3 and 4 where created earlier):

Sine (used to create sine waves, positive/negative starting)

Results of adding the sine function (servo 2, 3 and 4 where created earlier):

Cosine (used to create cosine waves, positive/negative starting)

Spline (used to fill in the gaps between key frames with smooth curves)

Results of adding the constrained spline function (servo 4 is a non-constrained spline):


You can now enable or disable each servo. Set the limits of travel or each individual servo. Then store the limits to the micro controller.

Once you have created the motion sequences you can now bind them to a button. Then download the motion sequences to the micro controller. So each time you press the button, that motion sequence will be played back.


All the other basic functions for the RTMCS have been implemented:

File menu stuff: open / save / save as / program

Program allows you to bind motion sequences to each button, then down loads the motions to the micro which then stores it into flash, for later play back. 

Edit: fixed (this lets you lock different servos so that you can't accidentally move those points)

View: zoom in/out, visible (this lets you make servos invisible, so they don't clutter the visual while working on another motion profile)


This board and the RTMCS will make animatronics simple enough that anyone can do it. :)

Everything you need to make it work:

Windows PC with serial port (or a USB to serial adaptor)

Servo control board and RTMCS program

6-volt battery (4 alkaline, or 5 NiCd, or 5 NiMH, or any other 6 volt battery)

and you will need servos, any servo will work so long as the pinout is:

pin1 signal

pin2 power

pin3 ground

Most of servos are this way, only some of the older ones have different pin outs.

Analog or Digital servos are ok, however I would only recommend servos with all metal gears in animatronic applications.


Things left to do on the micro controller side...

Get in some ATMEGA64 chips and solder up some boards and see if it works.

Update my compiler to so it can compile for the ATMEGA64.

Rewrite the boot loader for use with the ATMEGA64 (different page size, and needs to use extended addressing since it has more FLASH, EEPROM, and Registers then you can index with 16bits).

Write a SPI network addressing and communications protocol, so more then one board can be linked to the system.

Add random generator code, so motion sequences can be randomly executed.

Allow for more then one button to be pressed at a time (this will allow more then 5 user activated motion sequences).

Allow the motion sequencer the option to: repeat, bounce, or single shot a motion sequence.

Allow default boot locations of all servos (normal position) to be stored to the chip.

Allow reading of all motion sequences out of the chip.

Add version and storage information to the micro.

Write protect the boot loader to keep a over size motion table from over writing it.


Things left to do on the GUI side...

Finalize the ICD.

Clean up the interface (see if I can improve the draw performance to the screen).

Add default boot locations of all servos (normal position) to the limits page. Also add a warning in the programmer, to check that all motion sequences start and end at the normal position.

Add support for more then 4 servos, once the networking is done on the micro side.

Allow binding of motion sequences to random events, and allow user to set probabilities that the motion sequences will be executed.

Error handler, when micro reports back a different byte then was sent.

Allow motion tables to be read out of micro.

Allow saving of all motion sequences read out of the micro.

Calculate the remaining motion sequence time left on the micro.

Check version info from micro.

Make a page that checks that all the buttons are working on the controller.


Want to see some motion sequences in action? 

Check out Fred  Videos are at the bottom of the page. 

The Old Real Time Motion Control System was moved here: RTMCS_OLD

More Animatronics