Archive for the ‘MANOI’ Category

MANOI dancing to Yankadi

Posted by Erin, the RobotGrrl on Saturday, March 6th, 2010

MANOI dancing to Yankadi

Near the beginning of the Spring 2010 semester, a small activities fair was hosted for various clubs at Clarkson University. Autonomous Robotics Club originally didn’t have a table, but the orchestra let us have a little piece of theirs… =) Coincidentally, it was right near the Yankadi (west African drumming) club!

MANOI was running the Holiday Xtravaganza program, which made it look like it was ringing its bells in tune to the music!!! It was a really interesting sight to see, music from a robot and music from a group interacting together!

Here is a short video of some clips (mainly focussing on MANOI) of the event:



Music is a form of nonverbal communication, says Captain Obvious. So, it would be really worthwhile in the future to research how robots and humans can interact together through music. Perhaps in some elder care homes, drumming in a group with their personal robot (pets) can be a possibility! Maybe it wouldn’t be as intense drumming as this– it could be playing on a balafon or something.

The current elder generation has been closely tied with music… the radio was really popular back then, TVs weren’t all that common yet. Introducing personal robots into this type of a scenario would make sense, it wouldn’t be too intimidating for the elders since they have been accustomed to music for a very long time.

Here are two more videos of MANOI and Yankadi:





Yankadi is really great music activity since it’s so creative and doesn’t require any rhythm at all (if you’re playing in a big group). Plus, the sound is amazing! :)

Art and technology!! ^_^

Posted in: MANOI, Projects, Robot, School.

MANOI in 2010 and beyond +

Posted by Erin, the RobotGrrl on Thursday, January 7th, 2010

2009 was a pretty good year in terms of getting MANOI to do stuff! I figured out how to make MANOI write, walk, and dance around and be on TV. I have a pretty good template for programming MANOI too, and it seems quite rugged. 2009 also gave me the chance to learn the limitations of this robot, that being the knee servos.

I was always under the impression that “great” humanoid robots can walk, run, and kick very well, basically being the best robots in RoboCup. MANOI will never be a RoboCup robot, since the knees are too weak and the stronger knees cost $300 a piece. I realized this a few months ago, admitting it is sort of harder ;)

But, MANOI can be an interactive robot and do funny things… so in 2010, I’m going to focus more on the appearance and movements of MANOI. I want it so that the person interacting with MANOI can become attached to it, feeling that it exhibits an actual persona, instead of a programmed robot. I really feel that this was evident in MANOI’s Holiday Xtravaganza, but it still needs some improvements.

The first few steps would be to decorate MANOI’s head with two ears and two eyebrows. I’m considering antennae instead of eyebrows, because I don’t really want MANOI to come off as an uncanny human, but rather a friendly alien. I already have the two servos needed for the ears, so I’ll probably do those first. :D

Getting various sensor data will also be key in making MANOI more sociable. Currently there are three sensors on MANOI- the IR sensor, the gyro, and a LDR which is used for shaking hands. I’m thinking that those sensors alone are going to useful enough, for the time being.

It might be cool to have MANOI communicate back to a Mac so that the computer could produce audible results (like my Robbie the Robot science fair project).

There’s lots of possibilities out there, so this is pretty much a blog post of my scrambled thoughts. :P 2010 will be interesting, for sure!





Posted in: MANOI, Projects, Robot.

MANOI’s Holiday Xtravaganza

Posted by Erin, the RobotGrrl on Thursday, December 24th, 2009


HAPPY HOLIDAYS TO EVERYONE!!! :)

MANOI Holiday Xtravaganza

MANOI Holiday Xtravaganza

MANOI Holiday Xtravaganza

MANOI Holiday Xtravaganza

MANOI Holiday Xtravaganza

Posted in: Art, MANOI, Projects, Robot.

MANOI on Discovery Channel – Daily Planet!

Posted by Erin, the RobotGrrl on Friday, December 18th, 2009

RobotGrrl on Daily Planet

On December 17th, MANOI made its TV-screen ‘debut’ to gazillions of viewers in Canada! Daily Planet, a news style of a show for DIY’ers and scientists, featured MANOI’s holiday Xtravaganza warmup in the PlanetYou clip!

You can see the clip online by clicking here. It’s after the iPhone App part. ^_^

It was pretty awesome to see MANOI on TV, and a great way to ring out the year. WOOT! :D

The actual version of MANOI’s Holiday Xtravaganza will be posted soon :)

Posted in: MANOI, News, Projects, Robot, Robot News.

Friday Night Robotics * 3 – MANOI’s Holiday Xtravaganza Warmup

Posted by Erin, the RobotGrrl on Monday, December 14th, 2009

This weekend really gives patronage to how challenging the sport of robotics is (Technically it’s not a sport since it’s not in the Olympics), and how frustrating everything can be!!!! >:(

Last year, MANOI barely showed off any holiday spirit. Just a seemingly 2D stocking sticky-tacked onto its head.

This year I really wanted to improve on that because… well, I don’t really have a reason. I just wanted to. I wanted to see what it would be like for MANOI to ring bells ^_^

The decorating started off with just a hat, followed by the hunt to find jingle bells that are a circle, not a bell. My mom eventually figured out the type of bell that I was looking for, and bought me some festive bells and bows!

Et voila, MANOI! C’est magnifique! (Tada, MANOI is magnificent!)

Festive MANOI

I spent an enormous amount of time getting various actions set up so that I can string them together into a final product. In total, there are 7 different movements. My favourite of which, called ‘tango’ can be seen in the video below where one of MANOI’s arms is outwards, and another is inwards, perpendicular to its front shell with the bow. Surprisingly enough, its only two motion frames:

  1. int tangoHeadTilt = 400;
  2. int tangoHandTilt = 200;
  3. int tangoHandIn = 120;
  4. int tangoHandUp = 500;
  5. int tangoArmUp = 500;
  6. int tangoArmTilt = 600;
  7. int tangoHipTilt = 200;
  8. int leanBack = -25;
  9.  
  10. int tango_keyframe1[17] = {
  11.       HOME0-tangoHeadTilt,
  12.       HOME1+tangoHandTilt,
  13.       HOME2-tangoHandIn,
  14.       HOME3-tangoHandUp,
  15.       HOME4,
  16.       HOME5+tangoArmUp,
  17.       HOME6+tangoArmTilt,
  18.       HOME16+tangoHipTilt,
  19.       HOME17+leanBack,
  20.       HOME18,
  21.       HOME19,
  22.       HOME20,
  23.       HOME21-tangoHipTilt,
  24.       HOME22+leanBack,
  25.       HOME23,
  26.       HOME24,
  27.       HOME25
  28. };
  29.  
  30. int tango_keyframe2[17] = {
  31.       HOME0+tangoHeadTilt,
  32.       HOME1,
  33.       HOME2+tangoArmUp,
  34.       HOME3+tangoArmTilt,
  35.       HOME4+tangoHandTilt,
  36.       HOME5-tangoHandIn,
  37.       HOME6+tangoHandUp,
  38.       HOME16-tangoHipTilt,
  39.       HOME17+leanBack,
  40.       HOME18,
  41.       HOME19,
  42.       HOME20,
  43.       HOME21+tangoHipTilt,
  44.       HOME22+leanBack,
  45.       HOME23,
  46.       HOME24,
  47.       HOME25
  48. };
  49.  
  50. void tango(int repeat) {
  51.   for(int i=0; i<repeat; i++) {
  52.   setFrame(tango_keyframe1, 800, 50);
  53.   setFrame(tango_keyframe2, 800, 50);
  54.   }
  55. }

It’s weird because tango looks way more complicated than a movement that has 6 frames, the ‘both arm jingle’. This is where MANOI jingles both of its arms, so one is back and the other is forwards, then the hands both jingle.

  1. int bothArmJingle_frame1[17] = {
  2.       HOME0+200,
  3.       HOME1,
  4.       HOME2+leftArmOut,
  5.       HOME3+leftArmForward,
  6.       HOME4,
  7.       HOME5+rightArmOut,
  8.       HOME6+rightArmForward,
  9.       HOME16,
  10.       HOME17,
  11.       HOME18,
  12.       HOME19,
  13.       HOME20,
  14.       HOME21,
  15.       HOME22,
  16.       HOME23,
  17.       HOME24,
  18.       HOME25
  19. };
  20.    
  21. int bothArmJingle_frame2[17] = {
  22.       HOME0+200,
  23.       HOME1-leftWristMovement,
  24.       HOME2+leftArmOut,
  25.       HOME3+leftArmForward+50,
  26.       HOME4-rightWristMovement,
  27.       HOME5+rightArmOut,
  28.       HOME6+(rightArmForward-170),
  29.       HOME16,
  30.       HOME17,
  31.       HOME18,
  32.       HOME19,
  33.       HOME20,
  34.       HOME21,
  35.       HOME22,
  36.       HOME23,
  37.       HOME24,
  38.       HOME25
  39. };
  40.  
  41. int bothArmJingle_frame3[17] = {
  42.       HOME0+200,
  43.       HOME1+leftWristMovement,
  44.       HOME2+leftArmOut,
  45.       HOME3+leftArmForward,
  46.       HOME4+rightWristMovement,
  47.       HOME5+rightArmOut,
  48.       HOME6+rightArmForward,
  49.       HOME16,
  50.       HOME17,
  51.       HOME18,
  52.       HOME19,
  53.       HOME20,
  54.       HOME21,
  55.       HOME22,
  56.       HOME23,
  57.       HOME24,
  58.       HOME25
  59. };
  60.  
  61. int bothArmJingle_frame4[17] = {
  62.       HOME0-200,
  63.       HOME1,
  64.       HOME2+leftArmOut,
  65.       HOME3-leftArmForward,
  66.       HOME4,
  67.       HOME5+rightArmOut,
  68.       HOME6-rightArmForward,
  69.       HOME16,
  70.       HOME17,
  71.       HOME18,
  72.       HOME19,
  73.       HOME20,
  74.       HOME21,
  75.       HOME22,
  76.       HOME23,
  77.       HOME24,
  78.       HOME25
  79. };
  80.  
  81. int bothArmJingle_frame5[17] = {
  82.       HOME0-200,
  83.       HOME1-leftWristMovement,
  84.       HOME2+leftArmOut,
  85.       HOME3-(leftArmForward+50),
  86.       HOME4-rightWristMovement,
  87.       HOME5+rightArmOut,
  88.       HOME6-(rightArmForward+50),
  89.       HOME16,
  90.       HOME17,
  91.       HOME18,
  92.       HOME19,
  93.       HOME20,
  94.       HOME21,
  95.       HOME22,
  96.       HOME23,
  97.       HOME24,
  98.       HOME25
  99. };
  100.  
  101. int bothArmJingle_frame6[17] = {
  102.       HOME0-200,
  103.       HOME1+leftWristMovement,
  104.       HOME2+leftArmOut,
  105.       HOME3-leftArmForward,
  106.       HOME4+rightWristMovement,
  107.       HOME5+rightArmOut,
  108.       HOME6-rightArmForward,
  109.       HOME16,
  110.       HOME17,
  111.       HOME18,
  112.       HOME19,
  113.       HOME20,
  114.       HOME21,
  115.       HOME22,
  116.       HOME23,
  117.       HOME24,
  118.       HOME25
  119. };
  120.  
  121.  
  122. void bothArmJingle(int repeat) {
  123.  
  124.   for(int i=0; i<repeat; i++) {
  125.    
  126.   setFrame(bothArmJingle_frame1, 500, 0);
  127.   for(int i=0; i<5; i++) {
  128.   setFrame(bothArmJingle_frame2, 20, 0);
  129.   setFrame(bothArmJingle_frame3, 20, 0);
  130.   }
  131.   setFrame(bothArmJingle_frame4, 500, 0);
  132.   for(int i=0; i<5; i++) {
  133.   setFrame(bothArmJingle_frame5, 20, 0);
  134.   setFrame(bothArmJingle_frame6, 20, 0);
  135.   }
  136.  
  137.   }
  138.  
  139. }

Crazy right? I’ve found that in most of my other MANOI motions, the movement was very focused, with no other moving parts. So I made sure to make the most things move at once. :D I think it gives off a more exciting vibe. ^_^ Check out the video!

It really wasn’t as easy as the video makes it look. There were a lot of times where various movements wouldn’t match up, so they would catch the balance off-guard. Also, one of MANOI’s ankle servos went crazy on me, so it let the other foot down, causing a fall.

It’s super challenging to fix this because when MANOI falls, there are at least two things that temporarily break. You fix those things, but while you’re fixing them, other things break. While you’re trying to fix the new things, you can’t get a good grip on the robot because its entire body is made up of servos, and if you set the robot down, another thing will break. I would be willing to wager that working in no-gravity is a cinch compared to this!

Once everything is working again, you go and fix the motion. Fixing the motion is a whole separate routine of trial and error- you change some of the values of the servos and see what happens. There are two options for the next step, either have super fast reflexes, or only program with one hand on the keyboard. Since macs are not very one hand friendly, I have to have super fast reflexes to turn the power switch off on MANOI so that it won’t fall. If it does fall, you have to go back and fix everything.

In any case, once the motion is fixed, you go back and try it with the other movements. Just your luck, the battery runs out! MANOI falls, and you have to fix everything again.

It’s so unbelievably frustrating!! >:( Especially doing it for 3 days straight! There have been three times where MANOI has fallen off the table, about 1 meter (3 feet) tall. The risk of this is MANOI getting shocked by me, the air, and the carpet! It’s really nerve wracking, but thankfully MANOI is alright. Here’s a video of all of MANOI’s falls from the various videos that I tried to take:

At the end of the day, I really enjoy seeing MANOI move around. I think of it this way: it is my frustration and patience that has given an otherwise inanimate object LIFE. How cool is that? :)

There will be more videos of MANOI in its holiday gear showing up soon, with more blinky lights too!

Festive MANOI

Posted in: Art, MANOI, Programming, Projects, Robot.

Friday Night Robotics – Hula Hooping Motion?

Posted by Erin, the RobotGrrl on Monday, August 24th, 2009

Building on last week’s RGB LEDs, it was time to add some motions to MANOI that would suit the carnival-ish theme.

Friday Night Robotics - MANOI Hula-hooping

A significant amount of time was spent on brainstorming ideas on how to make MANOI walk. The key will be the first step, as it has to get the rhythm started. The following steps will maintain the rhythm. Another point to look at would be shoes for MANOI. For walking, MANOI uses these ‘flip flops’ :

Friday Night Robotics - MANOI Hula-hooping

For skating, MANOI has roller skates that are made out of lego. These shoes are attached by velcro. It would be interesting to see if I could use some ShapeLock to make new shoes. (Shoes, Omg shoes. Shoes. Let’s buy some shoes!) By using ShapeLock, I may be able to eliminate some of the tilting that the velcro introduces, and thus eliminating another reason why the robot may fall.

In any case, I want to build on MANOI’s hip and leg motions like I did with the arm motions. I started with a simple swaying function, but Boom from the Robotics themed floor suggested an awesome suggestion- tilting the body to make it go forward and backward. In the right sequence, this would make a hula hoop motion!

It was interesting the way we did it. Instead of just telling the hip motors to tilt forward, we also told the shin motors to tilt backward. This maintained the center of balance. :D

Friday Night Robotics - MANOI Hula-hooping

We added onto this with arm motions. When MANOI tilts backwards, the arms go up. We tried keeping the arms up for tilting forward, but it shifted the center of balance too much.

Friday Night Robotics - MANOI Hula-hooping

Here are two videos of the motion:

There are more photos on Flickr!

I’m going to blog more about the Robotics themed floor later, as well as the Autonomous Robotics Club! =) I also adopted an iRobot Create recently, and I’m controlling it with an Arduino. It’s fun! :)

Oh yeah, and MANOI fell about 3 feet from a desk when its battery ran out. It survived just fine, and nothing was broken!

Posted in: MANOI, Projects, Robot.

Friday Night Robotics – Fading Multiple RGB LEDs

Posted by Erin, the RobotGrrl on Tuesday, August 18th, 2009

I mentioned a while ago last week that I wanted to have MANOI’s RGB LEDs fade in and out at different rates from different starting points to different ending points. Luckily, it was a pretty easy task to accomplish, so now I can share the code with everyone! :)

The setup I have for MANOI’s RGB LEDs are using a Sanguino for a microcontroller. It has 6 PWM pins, so I use 3 pins for two LEDs. (The RGB LEDs have 3 leads for red green and blue). On MANOI, this ends up looking like this:

Friday Night Robotics - RGB LEDs + IR Sensor

I define left to be the LED #1 and #3, and right to be LED #2 and #4.

You need 1K ohm resistors, otherwise the red LED will use all of the power, and not save any for green and blue. :(

Friday Night Robotics - RGB LEDs + IR Sensor

I kept the wiring constant, since non-constant would be too confusing. Just a personal preference when dealing with RGB LEDs.

Friday Night Robotics - RGB LEDs + IR Sensor

Friday Night Robotics - RGB LEDs + IR Sensor

That is all for the RGB LEDs. Next part is the Fade function!

  1. void fade ( int startL_R, int startL_G, int startL_B,
  2.             int finishL_R, int finishL_G, int finishL_B,
  3.             int startR_R, int startR_G, int startR_B,
  4.             int finishR_R, int finishR_G, int finishR_B,
  5.             int stepTime ) {
  6.    
  7.   // Defining the ‘skip everys’ for different rates        
  8.   int skipEveryL_R = 256/abs(startL_R-finishL_R);
  9.   int skipEveryL_G = 256/abs(startL_G-finishL_G);
  10.   int skipEveryL_B = 256/abs(startL_B-finishL_B);
  11.   int skipEveryR_R = 256/abs(startR_R-finishR_R);
  12.   int skipEveryR_G = 256/abs(startR_G-finishR_G);
  13.   int skipEveryR_B = 256/abs(startR_B-finishR_B);
  14.  
  15.   // Count up to 255
  16.   for(int i=0; i<256; i++) {
  17.  
  18.     // If it’s fading down…
  19.     if(startL_R<finishL_R) {
  20.       // If we haven’t reached the final point yet…
  21.       if(i<=finishL_R) {
  22.         // If it’s a skip every…
  23.         if(i%skipEveryL_R == 0) {
  24.           // Colour the LED!
  25.           analogWrite(redL, i);
  26.         }
  27.       }
  28.     // If it’s fading up…
  29.     } else if(startL_R>finishL_R) {
  30.       // If we haven’t reached the final point yet…
  31.       if(i>=(256-startL_R)) {
  32.         // If it’s a skip every…
  33.         if(i%skipEveryL_R == 0) {
  34.           // Colour the LED!
  35.           analogWrite(redL, 256-i);
  36.         }
  37.       }
  38.     }
  39.    
  40.     if(startL_G<finishL_G) {
  41.       if(i<=finishL_G) {
  42.         if(i%skipEveryL_G == 0) {
  43.           analogWrite(greenL, i);
  44.         }
  45.       }
  46.     } else if(startL_G>finishL_G) {
  47.       if(i>=(256-startL_G)) {
  48.         if(i%skipEveryL_G == 0) {
  49.           analogWrite(greenL, 256-i);
  50.         }
  51.       }
  52.     }
  53.          
  54.     if(startL_B<finishL_B) {
  55.       if(i<=finishL_B) {
  56.         if(i%skipEveryL_B == 0) {
  57.           analogWrite(blueL, i);
  58.         }
  59.       }
  60.     } else if(startL_B>finishL_B) {
  61.       if(i>=(256-startL_B)) {
  62.         if(i%skipEveryL_B == 0) {
  63.           analogWrite(blueL, 256-i);
  64.         }
  65.       }
  66.     }
  67.    
  68.     if(startR_R<finishR_R) {
  69.       if(i<=finishR_R) {
  70.         if(i%skipEveryR_R == 0) {
  71.           analogWrite(redR, i);
  72.         }
  73.       }
  74.     } else if(startR_R>finishR_R) {
  75.       if(i>=(256-startR_R)) {
  76.         if(i%skipEveryR_R == 0) {
  77.           analogWrite(redR, 256-i);
  78.         }
  79.       }
  80.     }
  81.    
  82.     if(startR_G<finishR_G) {
  83.       if(i<=finishR_G) {
  84.         if(i%skipEveryR_G == 0) {
  85.           analogWrite(greenR, i);
  86.         }
  87.       }
  88.     } else if(startR_G>finishR_G) {
  89.       if(i>=(256-startR_G)) {
  90.         if(i%skipEveryR_G == 0) {
  91.           analogWrite(greenR, 256-i);
  92.         }
  93.       }
  94.     }
  95.          
  96.     if(startR_B<finishR_B) {
  97.       if(i<=finishR_B) {
  98.         if(i%skipEveryR_B == 0) {
  99.           analogWrite(blueR, i);
  100.         }
  101.       }
  102.     } else if(startR_B>finishR_B) {
  103.       if(i>=(256-startR_B)) {
  104.         if(i%skipEveryR_B == 0) {
  105.           analogWrite(blueR, 256-i);
  106.         }
  107.       }
  108.     }
  109.  
  110.     // Delay an amount of time between steps of colouring the LED
  111.     delay(stepTime);
  112.      
  113.   }
  114.  
  115. }

I added in some comments to make it clear what is going on. The if statement ‘block’ is repeated for RGB on left and right. You could use an array if you wanted to make it more complicated and more condensed.

That code by itself is pretty fun. But, it’s even more fun if you get to interact with it!

I created a headband with an IR sensor for MANOI last week (but neglected to blog it :( ).

Friday Night Robotics - RGB LEDs + IR Sensor

It’s very handy. The IR sensor is from Adafruit! It is really simple, and works ‘out of the box’ without any pull up or pull down resistor needed.

Friday Night Robotics - RGB LEDs + IR Sensor

Friday Night Robotics - RGB LEDs + IR Sensor

It goes straight into Analog 0.

Now I just need a simple function to map the analog reading back to an appropriate time :D

  1. int theTime() {
  2.   int result = map(analogRead(0), 0, 1023, 500, 10);
  3.   /*Serial.print(analogRead(0));
  4.   Serial.print(", ");
  5.   Serial.println(result);*/
  6.   return result;
  7. }

The reason why the Serial.print’s are all commented out is because if you leave the Sanguino running with the Serial.print’s, it will eventually run out of memory and just stop. However, for debugging, the Serial.print’s are very handy.

Here is the loop function that I use to give MANOI its magic:

  1. void loop() {
  2.  
  3.   LR = int(random(50, 255));
  4.   LG = int(random(50, 255));
  5.   LB = int(random(50, 255));
  6.   RR = int(random(50, 255));
  7.   RG = int(random(50, 255));
  8.   RB = int(random(50, 255));
  9.  
  10.   fade( preLR,      preLG,      preLB, // L Start
  11.                 LR,           LG,            LB, // L Finish
  12.            preRR,     preRG,       preRB, // R Start
  13.                  RR,          RG,            RB, // R Finish
  14.         1);
  15.        
  16.   delay(theTime());
  17.  
  18.   preLR = LR;
  19.   preLG = LG;
  20.   preLB = LB;
  21.   preRR = RR;
  22.   preRG = RG;
  23.   preRB = RB;
  24.  
  25. }

This code means that the LEDs fade from the previous value to the current value, over and over again. At the beginning of the program, the previous values are said to be 0.

I had to use 50 as a lower bound on the random as everything below it looks off :( Of course, you could add some features where you check to see if all three are below 50, if they are you would re-reandomize the values and check again. If not, you would send them to the fade function.

So all of this results in a really cool effect where if something gets close to MANOI, then its ‘antennai’ will start changing colours rapidly. Here are some videos:

The next thing now is to have MANOI dance and communicate to the Sanguino, Arduino + Motor shield (for MANOI’s ears), and the Arduino + WaveShield (for music). That would mean that MANOI would have FOUR cores!! :D ^_^ =)

You can see more photos on flickr.

Posted in: Art, MANOI, Programming, Projects, Robot.