Peter Penguin

Hello everyone,

I want to thank you for all your comments, projects and posts. The Lynxmotion forum is a great place full of good people, and I have learned a lot here. I’ve been on for about a year, just got my SSC-32. I’ve been working on building an animatronic penguin like my avatar for some time. Why a penguin? Long story, too long for here.

I have broken the project down into four modules:
Eyes,
Mouth and Sound,
Wings/Arms
…and “Dancing” Torso.
There are no plans right now to make anything other than a static animatronic - no self-propulsion.

Here is my first attempt at the eyes.

This is to be a cartoon character, so I am satisfied with just the eyes moving left and right, with working eyelids. As you will find, I find working with wood easy. I also manufacture parts out of many recycled objects (zoomkat will appreciate my approach :smiley: ). The eyes are ping pong balls, with a 1/4" hole in the top to allow for screwdriver access, a 7/8" hole in the back to position the screws and a 5/32" hole to screw the ‘eye’ onto the servo shaft. They are directly mounted on two micro-servos for the left-right movement. The eyelids are the round tops of plastic easter eggs, connected by a styrene ‘T’ salvaged from a sprue. a piece of a guitar string is used as a connecting rod and spring. It is attached to a paper-clip 'Z" by heat-shrink tubing. The 'Z" hooks into the servo horn.The HiTec servo is mounted with L-shaped wood brackets (eventually to be replaced with SES brackets :exclamation: )

Here is a photo from the front;
PenguinEyes.jpg

Mounting the micro-servos:
PenguinEyes-a.jpg

Here is a back and side view of the eyes, eyelids and operating mechanism of the latter. Note the difference in the position of the guitar string in the two photos.

He looks really funny cross-eyed, with eyelids half-closed…
dj

I like your approach on the eyes. I will enjoy following your progress. You don’t see many projects like this very often. Good luck!

I have been working on some code while waiting to save up for my next purchase(s) [Side note: Jim, do you think the site will ever have a “wish list” feature?]

As a test, I was writing some Windows commands in a CMD (or BAT) file to script eye movements. I generalized the coding by using an Excel spreadsheet to predefine common movements. This was used as a lookup table in the script spreadsheet. Then, I could script using english phrases and the spreadsheet would create the necessary Windows command. For example, I entered “Look right slowly”, the spreadsheet would look that up in a table and find the SSC-32 commands for that action were “#0P1100 #1P1100 T1500” and create the Windows command “echo #0P1100 #1P1100 T1500 > COM4:”.

My Table looks like this:

[code]Action SSC-32 Command Script cmd
Look ahead #0P1500 #1P1500 echo #0P1500 #1P1500 > COM4:
Look right #0P1100 #1P1100 echo #0P1100 #1P1100 > COM4:
Look left #0P2000 #1P2000 echo #0P2000 #1P2000 > COM4:
Cross-eyed #0P2000 #1P1100 echo #0P2000 #1P1100 > COM4:
Look right slowly #0P1100 #1P1100 T1500 echo #0P1100 #1P1100 T1500 > COM4:
Look ahead slowly #0P1500 #1P1500 T1500 echo #0P1500 #1P1500 T1500 > COM4:
Look left slowly #0P2000 #1P2000 T1500 echo #0P2000 #1P2000 T1500 > COM4:
Open eyes #2P750 echo #2P750 > COM4:
Close eyes #2P2000 echo #2P2000 > COM4:
Blink eyes #2P1200 echo #2P1200 > COM4:
Squint eyes #2P1200 echo #2P1200 > COM4:
Squint eyes slowly #2P1200 T2000 echo #2P1200 T2000 > COM4:
Open eyes slowly #2P750 T3000 echo #2P750 T3000 > COM4:
Close eyes slowly #2P2000 T3000 echo #2P2000 T3000 > COM4:
: :
pause pause

[/code]
My script generator looks like this:

[code]Action secs ::Script command

  •   	@echo off& if defined debug @echo on
    
  •   	rem Initialize eyes to 'home' position
    

: rem Control script starts after pause
Look ahead @echo Look ahead&@echo #0P1500 #1P1500 > COM4:
Open eyes @echo Open eyes&@echo #2P750 > COM4:
pause @echo pause&@pause
Look right @echo Look right&@echo #0P1100 #1P1100 > COM4:

  • 1.0 @echo delay 1.00secs.& @call delay 1.00
    Look left @echo Look left&@echo #0P2000 #1P2000 > COM4:
  • 1.0 @echo delay 1.00secs.& @call delay 1.00
    Look right @echo Look right&@echo #0P1100 #1P1100 > COM4:
  • 1.0 @echo delay 1.00secs.& @call delay 1.00
    Look ahead @echo Look ahead&@echo #0P1500 #1P1500 > COM4:
  • 1.0 @echo delay 1.00secs.& @call delay 1.00
    Look right @echo Look right&@echo #0P1100 #1P1100 > COM4:
  • 0.02 @echo delay 0.02secs.& @call delay 0.02
    Look ahead @echo Look ahead&@echo #0P1500 #1P1500 > COM4:
  • 0.1 @echo delay 0.10secs.& @call delay 0.10
    Look right @echo Look right&@echo #0P1100 #1P1100 > COM4:
  • 0.02 @echo delay 0.02secs.& @call delay 0.02
    Look ahead @echo Look ahead&@echo #0P1500 #1P1500 > COM4:
  • 0.1 @echo delay 0.10secs.& @call delay 0.10
    Look left slowly @echo Look left slowly&@echo #0P2000 #1P2000 T1500 > COM4:
  • 2.0 @echo delay 2.00secs.& @call delay 2.00
    Look ahead @echo Look ahead&@echo #0P1500 #1P1500 > COM4:
  • 2.0 @echo delay 2.00secs.& @call delay 2.00
    Blink eyes @echo Blink eyes&@echo #2P1200 > COM4:
  • 0.01 @echo delay 0.01secs.& @call delay 0.01
    Open eyes @echo Open eyes&@echo #2P750 > COM4:
  • 0.2 @echo delay 0.20secs.& @call delay 0.20
    Blink eyes @echo Blink eyes&@echo #2P1200 > COM4:
  • 0.01 @echo delay 0.01secs.& @call delay 0.01
    Open eyes @echo Open eyes&@echo #2P750 > COM4:
  • 0.2 @echo delay 0.20secs.& @call delay 0.20
    Look right @echo Look right&@echo #0P1100 #1P1100 > COM4:
  • 0.5 @echo delay 0.50secs.& @call delay 0.50
    Look ahead @echo Look ahead&@echo #0P1500 #1P1500 > COM4:
  • 0.02 @echo delay 0.02secs.& @call delay 0.02
    Squint eyes slowly @echo Squint eyes slowly&@echo #2P1200 T2000 > COM4:
  • 2.0 @echo delay 2.00secs.& @call delay 2.00
    Look right slowly @echo Look right slowly&@echo #0P1100 #1P1100 T1500 > COM4:
  • 2.0 @echo delay 2.00secs.& @call delay 2.00
    Look left slowly @echo Look left slowly&@echo #0P2000 #1P2000 T1500 > COM4:
  • 2.0 @echo delay 2.00secs.& @call delay 2.00
    Look ahead @echo Look ahead&@echo #0P1500 #1P1500 > COM4:
  • 1.0 @echo delay 1.00secs.& @call delay 1.00
    Open eyes @echo Open eyes&@echo #2P750 > COM4:
  • 0.03 @echo delay 0.03secs.& @call delay 0.03
    Cross-eyed @echo Cross-eyed&@echo #0P2000 #1P1100 > COM4:
    pause @echo pause&@pause
    [/code]
    The excel commands used to create the Windows commands are below. “C2” in the first example is the SSC-32 command for a move, such as “Look right slowly”.The more advanced version is used to generate code to display the specified action on the screen, look up the SSC-32 code for the action specified and send the command to the serial port. It uses the output of the first Excel command.
    CONCATENATE(“echo “,C2, " > COM4:”)
    =IF(ISNUMBER(C42),CONCATENATE(”@echo delay “,TEXT(C42,”#0.00"),“secs.& @call delay “,TEXT(C42,”#0.00”)),CONCATENATE("@echo “,B42,”&@",VLOOKUP(B42,Map!B$2:D$17,3,0)))

Here is a short video. I suggest viewing it with the sound off, too. Remember, this code was generated as a proof of concept and still needs tuning, etc…

…and a picture of the code executing on my laptop

looks like a fun project. its always nice when emotion can be shown in robotics and the eyes tell the whole story so a great place to start.

interesting project.

i think an owl would be a very cool project!?

The SSC-32 start up string option is 8)
Got it working to start my robotatronic in its home position.

dj

Got the mouth working.

Going to investigate piping the sound into an analog input and depending on the values returned, move the mouth. Has anyone read an audio source with the analog inputs, who can share some advice?

Latest update, with torso prototyped with foam core board and paper clips. Next version will use 6mm plywood and ball link sets :smiley:

The software needs a bit of tuning to the timing. Eventually, when I have a PERL program with two-way communications, the sequences will be a lot easier. Additionally, I hope to purchase SEQ.

  1. Awesome! 8)

looks like fun. :smiley:
good to see the progress.

It has been several months since my last posting, but sometimes life gets in the way of hobbies :smiley: I did finish a shed at my summer home, added neck rotate to the head module of Peter Penguin, added arms to the torso, and constructed the envelope follower for the audio portion (but got stuck testing because I had to write some code…)(As far as coding goes, Zoomkat - I have started coding in FreeBasic!).

My proof-of-concept torso has to be rebuilt in plywood because the foam-core is deforming under the load of the head; however it is still functional. One question all: in its normal home position, the penguin is stable, however when it moves to one side or other, the servos will need to actively hold the position. Do you think I will run into problems?

Additional testing of the concept will be interesting, because the animatronic is top-heavy. I may need to a) use stronger servos or b) rethink the torso design. If the latter, while design is ongoing, I will still have fun animating the head 8) and getting the audio synchronization working.

I am also ordering the Sequencer software, as it will simplify writing scripts. However, I am waiting for the new website so I can create my new account.

https://www.youtube.com/watch?v=kuix6IBJCYM

OK, have completely rebuilt Peter without foam core board and with 3mm plywood, without homemade hardware, replaced my paper clips links with ball joints, homemade hinges of poplar and paper clips with RC airplane hinges, added HS485 servos, and other improvements.

New video coming soon. With the addition of the arms and the neck motions, I am developing new show scripts. My new software (in another thread “FreeBASIC SSC-32 Interpreter”) is being debugged and will be used for animating Peter.

With the head on and the length of the body, the lower servos have to do a lot of work, particularly at their extremes. I was concerned but they have tested mostly successfully. I am going to have to strengthen the horns on at least the bottom two servos… But for demo purposes, they work fine! Mounting them as far away from the axis of rotation and using mechanical advantage seems to have worked well here.

The Peter’s base has been mounted on a 3/4" piece of plywood, with a channel for the three cables required to operate him. The power comes from an old computer power supply - 5.2VDC @ 8A - and is connected to the SSC-32 with modified power cables and connectors from a junk PC. The second cable is a serial cable from the controlling laptop to the SSC-32; I plan on replacing this with a custom serial cable with only GND, TX & RX connected, to minimize the cable thickness. The last cable is a standard 1/8" stereo plug, that sends the audio and audio control signal to my AAEF circuit for controlling the mouth.

For those of you newbies, be patient! I did run into a couple of :laughing: problems. Such as when I mounted the SSC-32, the pins that were on the bottom while I was testing were now located on the top. Guess where I plugged in the servos? For a long time, could not explain the behavior I was observing. :blush:

Then, my circuit for animating the mouth stoped working. Short story, you have to remember to set the volume correctly when inputting to an audio processing circuit. Another night debugging…

I am also working with a puppeteer in the Boston, MA USA area to make the outer skin for Peter. My old foam core body is repurposed as a model for his use. A video of his work can be found on YouTube here youtube.com/watch?v=yHSsAn1K65M

Peter Talks!

The audio’s right channel goes through an amplifier to a speaker mounted in Peter’s head. The left channel goes to my audio envelope follower circuit, whose analog DC output is connected to the SSC-32. My software reads from the SSC-32 ADC input and moves the mouth servo to varying positions of “openness”.

The audio envelope follower circuit has been discussed in this post SSC-32 Analog Inputs Question? Circuit and this one SSC-32 Analog Inputs Question? Test.

This audio file is mono; by creating a unique left channel/custom servo channel, I can tweak the amplitude for additional mouth detail. Additionally, I can compensate for any delays in the custom servo channel…

Hey! that’s pretty cool! 8) Nice job!

Thanks, Jim :slight_smile:

I’ve worked on Peter some more and wanted to share a video of all his motions. When I started this thread, I said the following:

At this point, those four components are working.
https://www.youtube.com/watch?v=9Z9r2cIk-lw

Now I am working on how to make the movements more smooth. If anyone has any ideas, please let me know. I have tried to use the time parameter to slow the servos down; perhaps it is as simple as more tuning…

I haven’t used an SSC-32, so i don’t know how you’d go about it, but i think you need to slow down the servos.
Fast jerks with a heavy contraption such as Peter, might damage the servo gears, unless they are metal than it’s fine.

Only other thing i can think of, is modify the control software to accelerate and decelerate the servo movements.
Which in general sounds like a good idea all around.

I’ve actually been keeping an eye on this, can’t wait for skinning, have you decided how you’ll skin it yet?
I was thinking a type of pressed fur, since penguins look kinda furry.

You might try using the speed command for some of the moves.

Thanks zoomkat. You sent me back to the manual. I had some difficulty in inderstanding the speed command before but have a better idea now. Time for more experimentation! Will help me in particular with the torso movements, where the positions can vary widely. Also, some of Peter’s more spastic moves were missing a time parameter. I’ve developed a spreadsheet to calculate the speed parameters based on the time I specified for a "normal’ move. That way, when the servos in the torso need to move twice as far, they won’t jerk or move too fast.

i see you are making progress. how do you plan to add the outer skin if any? 8)

Thanks innerbreed!

I have made even more progress, by replacing the Time command in some of my sequences with Speed parameters. This has resulted in much smoother movements. I am also working on an update to my control software (described in this thread lynxmotion.net/viewtopic.php?f=28&t=6695) to randomly play subscripts, so that his entire motion is not scripted. Then, I hope to add sensors so that he can react to his surroundings.

I was working with a local (Boston, MA, USA) puppeteer. I need to let him “borrow” Peter to take some measurments for a foam body dressed in fabric.