NINA's new Chassis

NINA's new robotic chassis. The first one was rediculously heavy! This one is still very sturdy and strong and I can lift it with one arm! All aluminum material (except for the nuts and bolts). Treads are lynxmotion with custom made hubs. The motors look a little small, but they're still very powerful (one of those motors could push around a ride-on toy and not even when its that geared down. These motors are geared down to 256:1 with a no-load RPM of 96 and a stall torque of 110 ft-lbs each. They run on 12 volts and I expect they will draw no more than 10 Amps each from the 20 AH battery pack I have constructed for them (plus I've got lots of 20 Amp fuses ready). That's if the robot is going up an incline (which I'm not intending it to do). Forward and backward will be much easier. But because the robot runs on treads and not wheels, it may make the job a little toughe. Still, I think they'll do the trick.

Update--October 27, 2010:

Finsihed building the rest of the chassis! Very stury, very light (I can actually pick it up and carry the whole thing in both hands). There are a lot of loose wires right now, but I'll definitely be sure to organize them safely before this beauty is operational. All I have to do now is plug in the electronics and run the program I've created for her. That'll be for tomorrow. I'll be sure to have my camera ready.

Update--October 28, 2010:

Connected the electronics and tested the servos. Results are shown in the new video.

Update--November 5, 2010

NINA is now fully articulated with interpolation alorithms for her servo movements! She tracks faces, shakes hands, and waves hello. NINA actually was put on display for Halloween this week where she had a line of trick-or-treaters forgetting about the candy and anxious to shake her hand. I will keep everyone updated on her progress and her programming is very easy to implement. Most of the hard part is over. Permitting the venue will allow it, I'm thinking of having her on display at the Autism Conference in February where I'll demonstrate her "social machine" functionality (Right now, NINA's main niche as a robot is to serve as an experimental social machine--to aid communication skills in those with communication disabilities like autism--particularly Asperger Syndrome.

Act as a mobile chassis platform for the NINA robot.

  • Actuators / output devices: Two 12 Volt gear motors (1:256 ratio)
  • Control method: autonomous
  • CPU: Laptop Computer, Phenom2 Tipple Core Processor.
  • Operating system: Windows 7
  • Power source: 12 Volt, 20AH NiMh battery pack
  • Programming language: Python
  • Sensors / input devices: 4 Sharp IRs, 6 PING Ultra Sonic sensors, Stereoscopic Camera.
  • Target environment: Indoors and outdoors

This is a companion discussion topic for the original entry at https://community.robotshop.com/robots/show/ninas-new-chassis

Thanks

Thanks, OddBot! NINA has an arm already–six degrees of freedom total. I think I posted it a while back. I tested it the other day (not attached but I held it by the upper arm) and it works great. I’ll be attaching it to the finished robot very soon, along with the stereoscopic head.

sexy…

sexy…

Hi! Looks like nice work has

Hi! Looks like nice work has been done. I’d like to know how big it is, could you give us some dimensions? And fotos of the side of the treads? The design of them looks nice. Thanks

I’ ll be following the work

Nice looking hardware! I

Nice looking hardware! I love it! But I’m more interested in the control software, that’s my weakest part. I can do the hardware no problem, but the software… Oh boy.

Cheers! We all want more pictures and a video! Keep it up!

It sounds like NINA is going

It sounds like NINA is going to be one awesome robot. I look forward to seeing it come together. Please continue to post your progress.

Note: Consider adding the tag ‘NINA’ to all your related posts. That will make them easy to find!

what do you mean - give

what do you mean - give yourself more credit   :-)     I think Mini-Eric has some of the best s/w I’ve seen on LMR.

Oh, those tracks…

I for one have drooled over those tracks for quite a while now. Expensive! But oh, how nice they are… And I love all the cogs and gears and pulleys and belts they sell too! Oh, such good stuff. I also gotta say that I am impressed with the arm as well --so many people start hot-gluing standard servos to sticks trying to buiild an arm only to find that none of the servos are even close to being powerful enough. --You my friend, went straight to the top. What 'cha got there $100 servos? I know they are the super-powerful ones (some with the extra-exta gearing on top) and it is nice to see someone put some investement in to thier project. Tons of money at least shows dedication!!

 

 

Thanks everybody!

Thank you everyone for your comments!

I’ll be updating my progress in just a few minutes. I spent all day working on the frame and haven’t gotten around to more testing (except the arm, which seems to work!). More photos to come. As soon as I get this thing moving, I’ll be uploading lots of vids too!

Very Nice!

Awesome looking robot - sort-of Johnny-five-esque! Nice sturdy looking construction so far too. Nice change from the hot-glue bots of late (though I really have nothing against hot glue either - the fact people here are playing with building robots is what really counts!). Looking forward to seeing your videos when you get them posted!

Hey, I like how your robot

Hey, I like how your robot responds. Of course, voice recognition makes troubles when you want to show it, it happened to me too many times. I have a suggestion:

I noticed that the servos move at their max speed. To keep them from breaking, you need to interpolate the moving and play it at lower speeds. I’m working on a function for Arduino that takes care of calculating the intermediary points between the start and end positions based on a Speed variable you pass on to that function. I’ll show you an example tonight.

 

 

 

Code

What are you using for voice recognition software and what are you using for text to speech?

 

Thanks

Thanks Ro-Bot-X! I certainly don’t want these servos to break, so I’ll await your example on interpolating servos. I’ve been trying to find a way to control the speed of servos using python (the robots programming language that ties in all the functionality together). I’ve also beening thinking about some arithemetic I could use to control the speed but then I run into implementing it in the program. I’ll observe your example and see how I might do it in python. Thanks so much for your offer.

Text to speech and Voice Recognition

Hi there, Chris.

I’m using windows speech recognition which is imported into NINA’s main python program. A good friend of mine wrote the module speech.py for me–he was inspired to write it after seeing the difficulty I was having on the daniweb forums. This great module, speech.py, is able to use speech recognition and and text-to-speech and pass on functions based on recognized text (like moving servos). The text-to-speech voice is Cepstral Robin–a child-like voice. I bought a liscense for it after listening to it and said, “Yes, that’s the voice for NINA.” Using python, I’m able to tie in all the functionality into one central program (speech, servos, motors, OpenCV computer vision–and eventually I’ll get sensors in there).

waoh! I never seen such a

waoh! I never seen such a thing! I don’t know a thing in programming but that looks real nice result!

Interpolate servo moves

I wrote this code after John Palmisano’s code for his ERP robot. All the math is his, I just wrote the code in Arduino. At the moment there is just one Move, similar moves can be added and played at various speeds (higher numbers will create more steps, thus slower actual speeds). I don’t particularly like the fact that I have to use empty arrays for servos that don’t move so I will try to store only the positions for the servos that actually move. But that will be done at some other time. Until then, here is the code:

 

//MiniEric test code to interpolate servo moves
//adapted after http://www.societyofrobots.com/robot_ERP.shtml code

#include <Servo.h>

// Servo pins

#define WaistPin     2  // digital pin 2
#define LshoulderPin 3  // digital pin 3
#define RshoulderPin 4  // digital pin 4
#define RarmPin      6  // digital pin 6
#define LarmPin      7  // digital pin 7

// Servos
Servo Waist;
Servo Lshoulder;
Servo Rshoulder;
Servo Larm;
Servo Rarm;

//various common initialized variables
int i;
int j;
float per_a;
float per_b;
int next;

//initialize variables
//these variables store only current servo location
int waist;
int leftShoulder;
int rightShoulder;
int leftArm;
int rightArm;

//initialize home variables - HOME POSITION
//tweak these numbers until the pose is right
int home_waist=65;
int home_leftShoulder=180;
int home_leftArm=80;
int home_rightShoulder=180;
int home_rightArm=90;

//define the Right_Arm_Wave Move
//all positions are added to the home position to get 
//the real positionn where the servo will be
//
//the robot lifts the right arm (rotating right shoulder 180 degrees) then moves the arm
//right-left-right-center
byte wave_count=6; //number of positions in the move array
int wave_waist[6]=         {   0,   0,   0,   0,   0, 0};
int wave_leftShoulder[6]=  {   0,   0,   0,   0,   0, 0};
int wave_leftArm[6]=       {   0,   0,   0,   0,   0, 0};
int wave_rightShoulder[6]= {-180,-180,-180,-180,-180, 0};
int wave_rightArm[6]=      {   0,  30, -30,  30,   0, 0};

void setup() { 

  Waist.attach(WaistPin);
  Lshoulder.attach(LshoulderPin);
  Rshoulder.attach(RshoulderPin);
  Larm.attach(LarmPin);
  Rarm.attach(RarmPin);
  Home_Position();

}

//-----------------------------------------------------------------------------

void loop(){
  for (int x=10; x<=100;x+=10){
    Rarm_wave(x); //try out different speeds, see wich works best
    delay(1000);
  }
}  

//-----------------------------------------------------------------------------

//home position
//all current positions are zeroed onto home position
void Home_Position(void){
  waist=0;
  leftShoulder=0;
  rightShoulder=0;
  leftArm=0;
  rightArm=0;

  Servos_Move();
}

//command robot to do stuff
void Servos_Move(void) {
  Waist.write(home_waist + waist);
  Lshoulder.write(home_leftShoulder + leftShoulder);
  Larm.write(home_leftArm + leftArm);
  Rshoulder.write(home_rightShoulder + rightShoulder);
  Rarm.write(home_rightArm + rightArm);
}

//this function calculates move factors
void calculate_per(int Speed, int move_count)
{
//mesh current move position with future move position
per_a = ((float)(Speed-j)) / ((float)Speed);
per_b = (float)1.0-per_a;

//make sure future move position isn’t outside array
if(i!=move_count-1)
next=i+1;
else //if it is, then restart back at zero
next=0;
}

 

void Rarm_wave(int Speed){
  for (i=0;i<wave_count;i++){
    //to test a particular position, uncomment i and j below
    //and set it to a particular value
    //i=3;

    //send each command several times
    for (j=0;j<Speed;j++){
      //j=0;//for testing particular kinematics points 

      //calculate factors
      calculate_per(Speed, wave_count);

      //calculate curent positions
      waist=wave_waist[i]*per_a + wave_waist[next]*per_b;
      leftShoulder=wave_leftShoulder[i]*per_a + wave_leftShoulder[next]*per_b;
      leftArm=wave_leftArm[i]*per_a + wave_leftArm[next]*per_b;
      rightShoulder=wave_rightShoulder[i]*per_a + wave_rightShoulder[next]*per_b;
      rightArm=wave_rightArm[i]*per_a + wave_rightArm[next]*per_b;

      //move one step
      Servos_Move();
    }
  }
}

 

Damn…

Well, I guess I gotta add Python to my list of languages to learn… If programming languages were real languages, I could be a tour guide at the UN by now.

 

BTW --Processing, which is so far, my language of choice on the PC, simply does not have much in the way of speach recognition… alas.

Amazing work! My son loves

Amazing work! My son loves that NINA looks like J5 from Short Circuit.

It looks like you have a great platform for innovation. Now that the physical build has reached this stage, I look forward to seeing what you can do with her.

need more INPUT Stephanie!

need more INPUT Stephanie!