ImageImageImageImage
Hazte Socio (El Foro siempre Gratis)
Paga con Tarjetas+ Info www.arde.cc/socios

Robot Hexapodo

Muestranos tus proyectos y pidenos la ayuda que necesites

Moderator: Junta Directiva

Post Reply
BoOpS
Administrador
Administrador
Posts: 1812
Joined: Mon Sep 19, 2005 7:29 pm
Nombre: Javier

Re: Robot Hexapodo

Post by BoOpS » Tue Dec 28, 2010 11:53 am

Lo hacen todos los que llevan pll (multiplicador de frecuencia)

Por cierto ten en cuenta que a mas frecuencia mas calor y mas consumo, recuerdo un 4550 que llevaba uno de mis rastreadores que se ponia achicharrando por tener la frecuencia "a tope"
Mi Blog de RoBoOpS

MA_BLACK
Usuario Avanzado
Usuario Avanzado
Posts: 282
Joined: Tue Nov 29, 2005 8:07 am
Contact:

Re: Robot Hexapodo

Post by MA_BLACK » Tue Dec 28, 2010 3:10 pm

La verdad es que deberia migrar el programa y bajarlo a 20 MHz que creo que seria mas que de sobra.

conoceis algun pic que lleve PLL? ahora yo solo conozco el 18F4550

User avatar
Sphinx
Usuario Experto
Usuario Experto
Posts: 639
Joined: Thu Apr 03, 2008 4:45 pm
Location: Madrid
Contact:

Re: Robot Hexapodo

Post by Sphinx » Tue Dec 28, 2010 4:29 pm

MA_BLACK wrote:La verdad es que deberia migrar el programa y bajarlo a 20 MHz que creo que seria mas que de sobra.

conoceis algun pic que lleve PLL? ahora yo solo conozco el 18F4550
Hola,
Lo mismo este buscador de PICs del propio Microchip no te ayuda, pero me pareció bastante útil cuando me puse a buscar PICs con características concretas:
http://www.microchip.com/productselecto ... ector.html" onclick="window.open(this.href);return false;

Salu2,
Sphinx
Tanto si piensas que puedes, como si piensas que no puedes, estás en lo cierto.- Henry Ford
>> Mis experiencias y proyectos robóticos: http://linuxdroids.com

User avatar
danluc
Iniciado
Iniciado
Posts: 63
Joined: Mon Nov 17, 2008 7:40 pm

Re: Robot Hexapodo

Post by danluc » Fri Dec 31, 2010 6:01 pm

Hola a todos y Felices Fiestas!!!!!!!!!!!!! Por si os sirve de ayuda yo estoy utilizando un 18F46K20 va de lujo. Un saludo.

MA_BLACK
Usuario Avanzado
Usuario Avanzado
Posts: 282
Joined: Tue Nov 29, 2005 8:07 am
Contact:

Re: Robot Hexapodo

Post by MA_BLACK » Fri Dec 31, 2010 6:25 pm

hola danluc, el codigo que hay en el foro me lo pasaste tu.

-Lo has creado tu?
-De que version de basic atom pro lo pasaste, la 1.3?

Que tiene este pic, para que lo hayas cambiado, por el 18F4550?
Last edited by MA_BLACK on Fri Dec 31, 2010 6:49 pm, edited 1 time in total.

MA_BLACK
Usuario Avanzado
Usuario Avanzado
Posts: 282
Joined: Tue Nov 29, 2005 8:07 am
Contact:

Re: Robot Hexapodo

Post by MA_BLACK » Fri Dec 31, 2010 6:44 pm

Llevo tiempo con este proyecto pero lo tenia parado, no se cuanta gente del foro tiene un hexapodo o un cuadrupedo, o cuanta gente le gustaria tener uno. Por eso pienso que podriamos estudiar el codigo de este para crear y modificar el control del hexapodo.

-En este caso se maneja desde un mando de Playstation 2.
-Usa cinematica inversa para la posicion de las patas.

La verdad es que el codigo es perfecto para el control del hexapod, lo que pasa es que en el foro de lynxmotion, usan para controlar sus robots, el Atom Pro 28, y creo que podriamos sacarle partido a este hexapodo con un pic de microchip, sobre todo por que es mas barato y nos podemos hacer las placas.

Yo estoy usando este codigo y va perfecto, lo que pasa es que ahora quiero estudiar y comprender el codigo para ponerle sensores, comunicar el hexapodo por I2C.

Creeis que seria posible, comentar este codigo por partes y asi saber como controla la cinematica inversa el hexapodo.

Adjunto el codigo que a mi me funciona ok.

PD: Modificando un poco el codigo vale para cuadrupedos, esta probado.
Attachments
Hexapod_balance.c
Codigo hexapodo
(54.24 KiB) Downloaded 177 times

User avatar
danluc
Iniciado
Iniciado
Posts: 63
Joined: Mon Nov 17, 2008 7:40 pm

Re: Robot Hexapodo

Post by danluc » Sat Jan 01, 2011 7:50 pm

Hola Ma_Black el verdadero creador de este codigo es el Sr.Jeroen Janssen junto con el Sr.Zenda (la parte de la cinematica inversa la escribio el en una hoaj de calculo excel y Jeroen lo traslado al AtomPro) su pagina web es http://robot-kits.org/" onclick="window.open(this.href);return false; podeis buscar informacion en el foro de Lynxmotion por ejemplo aki http://www.lynxmotion.com/images/html/proj102.htm" onclick="window.open(this.href);return false;, efectivamente originalmente se hizo para AtomPro en Basic pero creo firmemente que al trasladarlo a C para pic es mucho mas potente y al mismo tiempo economico de hecho yo lo he trasladado a este entorno, el cabio del 18f4550 al 18f46K20 es por la potencia y capacidad de memoria que ofrece este ultimo sin aumentar el precio practicamente creo que valen lo mismo. Un saludo y Feliz Año!!!!!!!!!!!!!!!!!!!

Me parece estupendo lo de comentar el codigo ya que se trata de un programa muy interesante donde se puede aprender mucho.

MA_BLACK
Usuario Avanzado
Usuario Avanzado
Posts: 282
Joined: Tue Nov 29, 2005 8:07 am
Contact:

Re: Robot Hexapodo

Post by MA_BLACK » Mon Jan 03, 2011 12:07 am

Yo tambien pienso que en C y con un pic es mas potente, y sobre todo economico. Voy a empezar con mis dudas a ver si se anima esto.

Voy a poner 3 partes del codigo donde tengo dudas, para no poner todo el codigo.

1-Aqui que hace al pulsar el boton de la derecha, es una duda practica, mas que de no entender el codigo, es para la gente que use el programa y lo haya probado.

Code: Select all

if (bit_test(DualShock[1],5) == 0 & bit_test(LastButton[0],5)){   //Right Button test
            if (RegNo<31)
            RegNo++;
         }
2-Aqui es parecido pero al pulsar la x del mando, es para la gente que use el programa y lo haya probado

Code: Select all

if (bit_test(DualShock[2],6) == 0 & bit_test(LastButton[1],6)){     //X Button test
         if (SetupMode == 0){
            SetupMode = 1;
            generate_tone(2000,100);
            generate_tone(10000,100);
         }
           else{
            SetupMode = 0;
            generate_tone(8000,250);
         }
      }      
Y la tercera es mas larga pero no comprendo que hace al entrar en la funcion setup, no se por que entra aqui, para que sirve?

Code: Select all

//Setup
void Setup(void){
   char Res[5];
   short Neg; 
   int Val,Val1,Val2,Val3,I,c,d;
   RegNo=32;
   //while(){
   for (RegNo=0;RegNo<=31;RegNo++){
      d=0;
      for(c=0;c<=4;c++){
         Res[c]='.';
      }
      printf("R%u%c",(RegNo+32),13);
      Neg=0;
      for(c=0;c<=4;c++){
         Res[c]=getch();
         if((Res[c]=='-')&(c==0)){
            Neg=1;
         }
         if(Res[c]==13){
            break;
         }
      }
      Val1=255;
      Val2=255;
      Val3=255;
      d=c-1;
      for(i=0;i<=d;i++){
         if(Neg&i==0){
            continue;
         }
         switch(Res[i]){
            case '0':Val=0;
                  break;
            case '1':Val=1;       
                  break;
            case '2':Val=2;       
                  break;
            case '3':Val=3;       
                  break;
            case '4':Val=4;       
                  break;
            case '5':Val=5;       
                  break;
            case '6':Val=6;       
                  break;
            case '7':Val=7;       
                  break;
            case '8':Val=8;       
                  break;
            case '9':Val=9;
                  break;
         }
         //printf("Val=%d%c",Val,13);
         if(Neg){
            switch(I){
               case 1:Val1=Val;
                  break;
               case 2:Val2=Val;
                  break;
               case 3:Val3=Val;
                  break;
            }
         }
         else{
            switch(I){
               case 0:Val1=Val;
                  break;
               case 1:Val2=Val;
                  break;
               case 2:Val3=Val;
                  break;
            }
         }
      } 
      //printf("Val1=%u Val2=%u Val3=%u%c",Val1,Val2,Val3,13);
      if(Val2==255&Val3==255){   
         ValReg[RegNo]=(signed int)Val1;
      }
      else{
         if(Val3==255)
            ValReg[RegNo]=(signed int)(Val1*10+Val2);
         else
            ValReg[RegNo]=(signed int)(Val1*100+Val2*10+Val3);
      }

      if(Neg){
         ValReg[RegNo]=ValReg[RegNo]*-1;
      }

      printf("ValReg[%u]=%d%c",(RegNo+32),ValReg[RegNo],13);
      //delay_ms(10);
   }
   //return;
   RegNo=0;
   while (SetupMode){
      Ps2Input();
      printf("#%u PO %d%c",RegNo,ValReg[RegNo],13);
      printf("R%u = %d%c",(RegNo+32),ValReg[RegNo],13);
      delay_ms(100);
   } 
}

User avatar
danluc
Iniciado
Iniciado
Posts: 63
Joined: Mon Nov 17, 2008 7:40 pm

Re: Robot Hexapodo

Post by danluc » Mon Jan 03, 2011 5:27 pm

MA_BLACK wrote:Yo tambien pienso que en C y con un pic es mas potente, y sobre todo economico. Voy a empezar con mis dudas a ver si se anima esto.

Voy a poner 3 partes del codigo donde tengo dudas, para no poner todo el codigo.

1-Aqui que hace al pulsar el boton de la derecha, es una duda practica, mas que de no entender el codigo, es para la gente que use el programa y lo haya probado.
//Esto solo vale para pasar de un registro a otro en la configuracion de lla placa SSC32 controladora de servos si no se utiliza esta placa no vala para nada

Code: Select all

if (bit_test(DualShock[1],5) == 0 & bit_test(LastButton[0],5)){   //Right Button test
            if (RegNo<31)
            RegNo++;
         }
2-Aqui es parecido pero al pulsar la x del mando, es para la gente que use el programa y lo haya probado
//Esto solo vale para entrar en modo setup de la placa SSC32

Code: Select all

if (bit_test(DualShock[2],6) == 0 & bit_test(LastButton[1],6)){     //X Button test
         if (SetupMode == 0){
            SetupMode = 1;
            generate_tone(2000,100);
            generate_tone(10000,100);
         }
           else{
            SetupMode = 0;
            generate_tone(8000,250);
         }
      }      
Y la tercera es mas larga pero no comprendo que hace al entrar en la funcion setup, no se por que entra aqui, para que sirve?
//Esto es lo que comunica con la placa SSC32 y cambia los ajustes de setup de esta placa

Code: Select all

//Setup
void Setup(void){
   char Res[5];
   short Neg; 
   int Val,Val1,Val2,Val3,I,c,d;
   RegNo=32;
   //while(){
   for (RegNo=0;RegNo<=31;RegNo++){
      d=0;
      for(c=0;c<=4;c++){
         Res[c]='.';
      }
      printf("R%u%c",(RegNo+32),13);
      Neg=0;
      for(c=0;c<=4;c++){
         Res[c]=getch();
         if((Res[c]=='-')&(c==0)){
            Neg=1;
         }
         if(Res[c]==13){
            break;
         }
      }
      Val1=255;
      Val2=255;
      Val3=255;
      d=c-1;
      for(i=0;i<=d;i++){
         if(Neg&i==0){
            continue;
         }
         switch(Res[i]){
            case '0':Val=0;
                  break;
            case '1':Val=1;       
                  break;
            case '2':Val=2;       
                  break;
            case '3':Val=3;       
                  break;
            case '4':Val=4;       
                  break;
            case '5':Val=5;       
                  break;
            case '6':Val=6;       
                  break;
            case '7':Val=7;       
                  break;
            case '8':Val=8;       
                  break;
            case '9':Val=9;
                  break;
         }
         //printf("Val=%d%c",Val,13);
         if(Neg){
            switch(I){
               case 1:Val1=Val;
                  break;
               case 2:Val2=Val;
                  break;
               case 3:Val3=Val;
                  break;
            }
         }
         else{
            switch(I){
               case 0:Val1=Val;
                  break;
               case 1:Val2=Val;
                  break;
               case 2:Val3=Val;
                  break;
            }
         }
      } 
      //printf("Val1=%u Val2=%u Val3=%u%c",Val1,Val2,Val3,13);
      if(Val2==255&Val3==255){   
         ValReg[RegNo]=(signed int)Val1;
      }
      else{
         if(Val3==255)
            ValReg[RegNo]=(signed int)(Val1*10+Val2);
         else
            ValReg[RegNo]=(signed int)(Val1*100+Val2*10+Val3);
      }

      if(Neg){
         ValReg[RegNo]=ValReg[RegNo]*-1;
      }

      printf("ValReg[%u]=%d%c",(RegNo+32),ValReg[RegNo],13);
      //delay_ms(10);
   }
   //return;
   RegNo=0;
   while (SetupMode){
      Ps2Input();
      printf("#%u PO %d%c",RegNo,ValReg[RegNo],13);
      printf("R%u = %d%c",(RegNo+32),ValReg[RegNo],13);
      delay_ms(100);
   } 
}

MA_BLACK
Usuario Avanzado
Usuario Avanzado
Posts: 282
Joined: Tue Nov 29, 2005 8:07 am
Contact:

Re: Robot Hexapodo

Post by MA_BLACK » Mon Jan 03, 2011 6:47 pm

yo usa la SSC32, Pero estos parametros que se cambian de la SSC32 para que es? que registros son? y que hacen en el comportamiento del hexapodo?

Por cierto que version de firmware, usas en la SSC32?

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest