TODOPIC

Mecatrónica => Robótica => Mensaje iniciado por: gera en 29 de Agosto de 2012, 11:53:00

Título: Robot Hexapodo
Publicado por: gera en 29 de Agosto de 2012, 11:53:00
A mi hace poco se me dio por hacer un hexapodo. Cuento con poco dinero, asique estoy buscando de hacerlo lo más económico posible. Estuve investigando bastante y encontré este bichito:

(http://wiki.edwindertien.nl/lib/exe/fetch.php?w=280&media=a4designs:hexapod:spider2.jpg)

En esta (http://wiki.edwindertien.nl/doku.php?id=a4designs:hexapod:start) página están los cortes de las partes en varios formatos (svg, eps y pdf).

(http://wiki.edwindertien.nl/lib/exe/fetch.php?w=350&media=a4designs:hexapod:hex3mmnogluev1.0.png)

Ayer mandé a cortar las piezas en acrílico, y pienso comprar estos servos (http://www.hobbyking.com/hobbyking/store/uh_viewItem.asp?idProduct=9549) en hobbyking al increible precio de U$S 2 cada uno:

(http://www.hobbyking.com/hobbyking/store/catalog/TG9e(1).jpg)

Ahora estoy investigando a ver si encuentro algo de código, o al menos una ayuda para para tener un punto de partida. Estaba pensando en escribir una rutina donde uno ingrese coordenadas cartesianas, y el programa calcule los ángulos de los servos para mover la pata a esa posición. Luego puedo escribir combinaciones de posiciones para componer los movimientos.

Alguien sabe algo sobre cómo se programan los movimientos de estos bichos? O donde puedo encontrar algo de material?
Gracias y saludos!!


Nota del moderador:
El tema original fue dividido porque se ha convertido en un proyecto completo, ya que el hilo que lo originó solo tenia carácter informativo con, observaciones y vídeos de los hexápodos que se pueden encontrar en la red. Para el que esté interesado en ver el resto de mensajes que preceden a los de este hilo, puede entrar desde el siguiente enlace:
http://www.todopic.com.ar/foros/index.php?topic=39116.0
Título: Robot Hexapodo
Publicado por: KALLITOS en 29 de Agosto de 2012, 12:47:13
Seguiré el hilo atentamente!!!
Título: Robot Hexapodo
Publicado por: Nocturno en 29 de Agosto de 2012, 13:02:49
Impresionante el hexápodo del vídeo, Don Jesús.

Qué bien que tienes los cortes ya dibujados, gera, así da gusto. Esperando ver tus resultados.
Título: Robot Hexapodo
Publicado por: Algec en 29 de Agosto de 2012, 13:04:20
Sigo tu hilo, si quieres hacerlo en CCS con pic seria lo suyo para poderte ayudar-
Título: Robot Hexapodo
Publicado por: gera en 29 de Agosto de 2012, 13:25:20
Sigo tu hilo, si quieres hacerlo en CCS con pic seria lo suyo para poderte ayudar-

En realidad estaba pensando usar un pic (o un mbed en todo caso) para generar las señales para los 18 servos, comunicado por bluetooth con la PC, y allí escribir el programa. De ese modo, no estoy limitado por el poder de procesamiento del pic, y el circuito se simplifica bastante (el robot de por si es bastante pequeño y no hay mucho espacio para placas). En la PC planeo programar en Processing o VBasic, así puedo hacer una interfaz gráfica bonita.
Muchas gracias por la predisposición a ayudar! Lo re aprecio!
Título: Robot Hexapodo
Publicado por: stk500 en 29 de Agosto de 2012, 13:53:03
 :shock: que chulo
Título: Robot Hexapodo
Publicado por: jfh900 en 29 de Agosto de 2012, 16:03:36
Que bien Gera, yo también me animaría a montarlo, pero no sé donde se puede cortar el acrílico a buen precio.

Un saludo
Título: Robot Hexapodo
Publicado por: KALLITOS en 29 de Agosto de 2012, 16:26:52
Que bien Gera, yo también me animaría a montarlo, pero no sé donde se puede cortar el acrílico a buen precio.

Un saludo

Yo aca tampoco, es mas no creo que lo hagan, entonces como podriamos hacer los acrilicos?, taladro tengo.
Título: Robot Hexapodo
Publicado por: pajaro en 29 de Agosto de 2012, 17:03:58
Hola compañeros

que bueno que se esta poniendo este hilo,
Gera esos perfiles a que escala estan,
yo tengo unos micromicro servos de tower pro SG9G

http://img.alibaba.com/photo/245829146/RC_SERVO_TowerPro_SG_90_Micro_Servo.jpg

me aseguraron que el torque es de 2 kilos y solo pensan 9 gramos.

A mi me gustaria hacerme uno de estos aunque fuese contando las piezas
sobre panel de marqueteria y con sierra de marqueteria o de pelo:

http://jlfeijooi.en.eresmas.com/guitarra/Sierrapelo.jpg

Algec yo lo programaria en CCS si no me convencen de lo contrario.

Yo nunca antes monte un robot pero me gustaria empezar con este.

¿que micro micro llevais pensado usar?

se necesitaria usar pwm por cada servo verdad..?

Un Saludo


Título: Robot Hexapodo
Publicado por: KALLITOS en 29 de Agosto de 2012, 17:06:11
Algec yo lo programaria en CCS si no me convencen de lo contrario.

Yo en C30, fin de mes me estoy pidiendo 20 servos de esos.

saludos!!
Título: Robot Hexapodo
Publicado por: pajaro en 29 de Agosto de 2012, 18:04:51
Hola Gera
mira encontre algo de teoria:

http://imarrero.webs.ull.es/sctm05/modulo2lp/1/msigut.pdf

Nocturno, como era la pagina que tu has recomendado alguna vez en la cual
el icono es un integrado con ojos, el fondo es verde o verde azulado,
en la cual se habla del potenciometro digital, 555 y de la cinematica, y hay otros circuitos
muy bien explicados.

ahi venia explicado..lo del calculo de formulas para moverse aun punto desde otro dado.
no logro recordar la web ni dar con la pagina.

tu la recuerdas?

Un Saludo.

Título: Robot Hexapodo
Publicado por: gera en 29 de Agosto de 2012, 18:26:00
Que bien Gera, yo también me animaría a montarlo, pero no sé donde se puede cortar el acrílico a buen precio.

Un saludo

Yo aca tampoco, es mas no creo que lo hagan, entonces como podriamos hacer los acrilicos?, taladro tengo.

Mira, a mi me cobran $250 (pesos argentinos, unos U$S 50) por las piezas ya cortadas. Me parece un precio mas o menos razonable.
Lo que podes hacer es pedir prestada una CNC que te los corte, o imprimir el pdf pegarlo en una plancha de acrilico, y con muuuucha paciencia, cortarlo a mano con un mini taladro y gastarlo de a poco. El acrilico es muy maleable y facil de cortar.

Hola compañeros

que bueno que se esta poniendo este hilo,
Gera esos perfiles a que escala estan,
yo tengo unos micromicro servos de tower pro SG9G

http://img.alibaba.com/photo/245829146/RC_SERVO_TowerPro_SG_90_Micro_Servo.jpg

me aseguraron que el torque es de 2 kilos y solo pensan 9 gramos.
¿que micro micro llevais pensado usar?
se necesitaria usar pwm por cada servo verdad..?

Un Saludo

Metete en esta pagina: http://wiki.edwindertien.nl/doku.php?id=a4designs:hexapod:start
ahi estan los diagramas en pdf a escala natural. Los mismos estan pensados para montar el robot con los servos ES05. Fijate si las dimensiones son iguales a tus servos.
Como dije mas arriba, en el robot voy a poner un micro que controle las 18 señales de PWM, y por medio de bluetooth voy a enviar los valores que deben tomar dichas señales. O sea que el programa principal va a ejecutar en una PC.

Hola Gera
mira encontre algo de teoria:

http://imarrero.webs.ull.es/sctm05/modulo2lp/1/msigut.pdf


Buenísimo!! Es mas o menos lo que estuve modelando hasta ahora ;) Gracias por compartir!
Título: Robot Hexapodo
Publicado por: Nocturno en 30 de Agosto de 2012, 02:47:22

Nocturno, como era la pagina que tu has recomendado alguna vez en la cual
el icono es un integrado con ojos, el fondo es verde o verde azulado,
en la cual se habla del potenciometro digital, 555 y de la cinematica, y hay otros circuitos
muy bien explicados.

ahi venia explicado..lo del calculo de formulas para moverse aun punto desde otro dado.
no logro recordar la web ni dar con la pagina.

tu la recuerdas?

Un Saludo.



Ni idea  :shock:
Con esas pistas que me das no se me ocurre cuál es.
Título: Robot Hexapodo
Publicado por: diguito_69 en 30 de Agosto de 2012, 05:03:27
Hola Gera
mira encontre algo de teoria:

http://imarrero.webs.ull.es/sctm05/modulo2lp/1/msigut.pdf

Nocturno, como era la pagina que tu has recomendado alguna vez en la cual
el icono es un integrado con ojos, el fondo es verde o verde azulado,
en la cual se habla del potenciometro digital, 555 y de la cinematica, y hay otros circuitos
muy bien explicados.

ahi venia explicado..lo del calculo de formulas para moverse aun punto desde otro dado.
no logro recordar la web ni dar con la pagina.

tu la recuerdas?

Un Saludo.



Será esta? http://www.x-robotics.com/ (http://www.x-robotics.com/)

Saludos.
Título: Robot Hexapodo
Publicado por: pajaro en 30 de Agosto de 2012, 07:54:49
Hola Digito_69

Esa era la web que yo decia, Gracias Digito_69
Nocturno perdona por las indicaciones,
pero yo solo consulte un par de veces y lo vi muy interesante..

En el menu de la izquierda selecionais mecanica
y en lo que os muestra en la derecha le picais
sobre cinematica.

Ahi lo explican muy bien.

--------------------

Otra cosita que les parece este precio, es de fiar:

http://www.ebay.com.au/itm/Tower-Pro-SG90-Popular-9G-Micro-Servo-inc-3-x-Horns-/120976509448?pt=UK_ToysGames_RadioControlled_JN&hash=item1c2ac30a08

si es cierto de dolares a euros no es mucho verdad?





Título: Robot Hexapodo
Publicado por: gera en 04 de Septiembre de 2012, 02:09:07
Miren lo que me llego hoy :lol:
(http://img27.imageshack.us/img27/6730/foto0258a.th.jpg) (http://img27.imageshack.us/i/foto0258a.jpg/) (http://img651.imageshack.us/img651/3899/foto0260ur.th.jpg) (http://img651.imageshack.us/i/foto0260ur.jpg/)
(http://img528.imageshack.us/img528/8782/foto0261w.th.jpg) (http://img528.imageshack.us/i/foto0261w.jpg/) (http://img36.imageshack.us/img36/2513/foto0262dp.th.jpg) (http://img36.imageshack.us/i/foto0262dp.jpg/)
(http://img204.imageshack.us/img204/2963/foto0263tq.th.jpg) (http://img204.imageshack.us/i/foto0263tq.jpg/) (http://img99.imageshack.us/img99/3655/foto0264u.th.jpg) (http://img99.imageshack.us/i/foto0264u.jpg/)
(http://img33.imageshack.us/img33/5430/foto0266s.th.jpg) (http://img33.imageshack.us/i/foto0266s.jpg/)

Por el momento tengo solo tres servos para ir trabajando en una sola pata. Tenia miedo de que haya un pequeño error en los planos o del que corto el acrilico, pero las piezas encajan perfectamente con los servos (es mas, creo que no pasa ni un pelo). Estoy sorprendido y feliz por la precisión de la cortadora laser! ;-)

Con respecto al software, estuve leyendo mucho sobre los algoritmos que controlan las patas de estos bichos, y todos hablan de lo mismo: Cinematica Inversa (o Inverse Kinematics IK) y básicamente trata de lo siguiente:
Aqui hay un esquema tipico de una pata de un hexapodo
(http://www.pablogindel.com/imagenes/15_IK_p.jpg)
Para cualquiera que sepa un poco de trigonometria, es muy facil calcular la posicion del extremo de la pata (x,y,z) conociendo las posiciones (angulos) de los servos (alfa,beta,gamma). Este proceso se conoce como Cinematica Directa. Ahora, si conocemos la posicion de la pata (x,y,z) y queremos averiguar que valores deben tener los servos (alfa,beta,gamma) para alcanzar dicha posicion, nos encontramos con un problema de IK.

En la figura vemos que el extremo de la pata forma tres triangulos con respecto a cada servo. Dos de ellos son rectos y es facil calcular sus incognitas por teorema de pitagoras e identidades trigonometricas simples. Para el tercero es necesario utilizar el teorema del coseno (http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CCMQFjAA&url=http%3A%2F%2Fes.wikipedia.org%2Fwiki%2FTeorema_del_coseno&ei=2ohFUK3OIYXm9ASd4IE4&usg=AFQjCNEyfFq4CJ-InXU7Gb1u7hKJLByUBw&sig2=yFV0YN5ezKJaiFT2dQtIBw)

Bueno, la idea no es dar una clase de matematicas, el que quiera la demostracion puede visitar este sitio (http://arduin0.blogspot.com.ar/2012/01/inverse-kinematics-ik-implementation.html) o buscar en google, hay muchisima informacion al respecto.

Para los que no quieren complicarse tanto con matematicas, aqui hay una rutina relativamente simple que toma los valores x,y,z y devuelve alfa,beta,gamma
Código: C
  1. ANGULOS alfabetagama (COORD3D P) {    
  2.   // convierte las coordenadas cartesianas en los angulos correspondientes
  3.   // recibe: xn, y, z; devuelve: gama (angulo cuerpo|coxa), alfa (angulo coxa|femur), beta (angulo femur|tibia)  
  4.   // fundamento: teorema de pitagoras + teorema del coseno (ver figura)
  5.  
  6.   P.x = abs (P.x);        // pequeño truco para aprovechar la simeti­a del eje x
  7.   ANGULOS A;
  8.  
  9.   // fase 1, calculamos "x" y el angulo "gama"
  10.   // COXA es la distancia entre el eje del primer motor y el segundo
  11.   float x = hypot (P.z, P.x) - COXA;
  12.   A.gama = ANG_SCALE*(atan(P.z/P.x))/PI;                  
  13.  
  14.   // fase 2, calculamos alfa y beta
  15.   // ver constantes definidas al principio
  16.   float xx = x*x; float yy = P.y*P.y;
  17.   float cosalfa = (xx + yy + FEMUR*FEMUR - TIBIA*TIBIA) / (2*FEMUR*sqrt(xx + yy));          // coseno del angulo que forman el "femur" y la hipotenusa
  18.   float cosbeta = (FEMUR*FEMUR + TIBIA*TIBIA - xx - yy) / (2*FEMUR*TIBIA);                         // coseno del angulo que forman "femur" y "tibia"
  19.   A.alfa = ANG_SCALE*(acos(cosalfa) + atan(P.y/x))/PI;
  20.   A.beta = ANG_SCALE/2 - ANG_SCALE*acos(cosbeta)/PI;
  21.  
  22.   return A;  
  23. }

Creo que el código es bastante entendible (gracias Pablo Gindel y Jorge Visca, de cuyo proyecto saque este fragmento de codigo). Todas las constantes (en mayusculas) dependen de las longitudes de las partes de nuestro robot, y de los servos.

Bueno, es todo por hoy. Antes de poder programar algo, tengo que fabricar un controlador de servos (20 servos, para las 18 patas y dos extra), el cual pienso hacer con un pic18f2550 con USB, o por el momento con un mbed.
Cuando tenga algo vuelvo a postear.
Saludos!!!
Título: Robot Hexapodo
Publicado por: Nocturno en 04 de Septiembre de 2012, 03:52:00
Sí que están guapas esas piezas, ya estoy deseando verlo montado.
Título: Robot Hexapodo
Publicado por: gera en 04 de Septiembre de 2012, 16:30:29
Bueno, ya diseñe la placa controladora de los servos. Utiliza un pic18f2550 en formato DIP. Iba a hacerlo con un pic18f4550 TQFP para que la placa quede lo mas pequeña posible, pero no quise enroscarme con la soldadura SMD y el circuito de ICSP. Ademas los pines es lo que mas lugar ocupa.
Aca van unas capturas:
(http://s14.postimage.org/s01znzegt/Captura.png) (http://postimage.org/image/s01znzegt/) (http://s14.postimage.org/6ds142m7x/Captura2.png) (http://postimage.org/image/6ds142m7x/)

Como ven, se tiene acceso a todos los pines, de modo de poder conectarlo via UART o USB a la PC. Y de ser necesario, se puede incluir un modulo bluetooth (colocando un circuito auxiliar para adaptar los 3.3V). La idea es alimentarlo con una LiPo de 2 celdas (7.4V), por eso el regulador de 5V (todavia tengo que hacer el calculo si el regulador va a soportar a todos los servos funcionando).
Como vamos a ocupar dos pines para comunicacion (ya sean RX/TX o D+/D-), nos quedan 19 para conectar servos.

Acepto cualquier conejo o sugerencia, lo diseñe muy rapido y es posible que se me haya escapado algo. Tal vez algun elemento de proteccion o algun pin del micro que no sirva como salida.

Gracias y saludos!!
Título: Robot Hexapodo
Publicado por: AKENAFAB en 04 de Septiembre de 2012, 16:41:12
La alimentación de los servos conectala directo,luego de ahí ya regulas para el control.

Puedes usar 7.2v para los servos y de ahí ya regulas.

Tengo este diseño sin terminar de la controladora de servos.
Pego la imagen por si sirve de referencia.

Esta pensada para usar 16 servos.
Control mediante usb o rs232.
Trae 2 leds,1 indicador de energizado y el otro para visualizar que recibe o ejecuta comandos.

Saludos!
Título: Robot Hexapodo
Publicado por: gera en 04 de Septiembre de 2012, 17:43:18
Akena, me estas diciendo que los servos los alimente con los 7.2V de la Lipo directamente, y que las señales PWM sean de 5V?
Porque lei que los microservos se alimentan de 3V a 6V, me da miedo romperlos.
Saludos!
Título: Robot Hexapodo
Publicado por: AKENAFAB en 04 de Septiembre de 2012, 18:54:23
Akena, me estas diciendo que los servos los alimente con los 7.2V de la Lipo directamente, y que las señales PWM sean de 5V?
Porque lei que los microservos se alimentan de 3V a 6V, me da miedo romperlos.
Saludos!

Yo los he alimentado con 7.2v sin ningún problema con baterias nickel.cadmio,que bien cargadas dan alrededor de 8v xD
Esto en competencias  :mrgreen:

¿ Que servos vas a ocupar ? (http://www.hobbyking.com/hobbyking/store/uh_viewItem.asp?idProduct=9549) ya vi que modelo,parece ser de los pequeños.

Viendo el tipo de servo mejor usa un regulador switching de 5vcd@3A,así te evitas tantas perdidas y calentones con el regulador lineal.

LM2576
LM2596
LM22678
LM22679

Saludos!
Título: Robot Hexapodo
Publicado por: gera en 04 de Septiembre de 2012, 23:10:29
Yo los he alimentado con 7.2v sin ningún problema con baterias nickel.cadmio,que bien cardas dan alrededor de 8v xD
Esto en competencias  :mrgreen:

¿ Que servos vas a ocupar ? (http://www.hobbyking.com/hobbyking/store/uh_viewItem.asp?idProduct=9549) ya vi que modelo,parece ser de los pequeños.

Viendo el tipo de servo mejor usa un regulador switching de 5vcd@3A,así te evitas tantas perdidas y calentones con el regulador lineal.

LM2576
LM2596
LM22678
LM22679

Saludos!

Creo que voy a hacer eso, porq una LiPo recien cargada da 8.4V, ya esta demasiado lejos de los limites del servo.
Mil gracias por el consejo! ;)
Título: Robot Hexapodo
Publicado por: pajaro en 07 de Septiembre de 2012, 09:17:22
Hola Gera

esas piezas parecen muy sensibles..? son robustas?
cuanto pesa el conjunto sin los servos?

que os parecio el enlace de los servos que puse en el post anterior?
parecen muy baratos ustedes le ven alguna pega?

Tambien encontre este enlace buscando bichos..

http://www.foroselectronica.es/f56/robot-hexapodo-woody-665.html

espero respuesta por parte de los servos..

Un saludo..


Título: Robot Hexapodo
Publicado por: Algec en 07 de Septiembre de 2012, 16:58:35
A ver no recuerdo demasiado de eso del calculo que propones, pero....lo que quieres hacer es algo asi como...
Una tabla de posiciones para cada tipo de movimiento y pata? en esa tabla irian los desplazamientos en x,y y z de la pata correspondiente y el tiempo que tardaria en hacerlo, o la velocidad del movimiento de esa pata,y con el calculo que propones calcularias los anugulos de cada servo y en consiguiente el valor Pwm a darle.
Es esa la idea del software?
Me supongo que debe ser algo asi, una rutina de cada servo de angulo/ pwm/velocidad de traslacion, y a cada movimiento se asigna el valor del angulo velocidad despues de calcular el angulo en la rutina de coordenadas a angulos.
Podrias aclararme algo sobre eso?
Mejor, donde hay ejemplos de software, estoy buscando pero no localizo nada.
Puedes poner un diagrama de bloques de la programacion que propones?
A ver en que podemos colaborar.
Personalmente me gustan las cosas pequeñas y me gustaria hacer un mini hexapodo con los servos mas chicos que encuentre y hacerlo con mi fresadora en aluminio.
La mecanica no me preocupa solo como hacer las rutinas para que los movimientos sean naturales de un insecto.
Por otra parte me gusta que mis robots sean libres asi que le incorporaria algoritmos aleatorios y sensores de luz choque etc.
Con eso anda libre por ahi y se mueve como le parece por el algoritsmo aleatorio y los sensores hacen que tambien se generen numeros aleatorios de funcionamiento.
Título: Robot Hexapodo
Publicado por: gera en 07 de Septiembre de 2012, 23:41:14
Pajaro, las piezas no son para nada fragiles. Sin querer puse un servo al reves, y se quedo enganchado (con un bracket q tiene el servo), le tuve q hacer mucha fuerza para poder sacarlo, y el acrilico quedo intacto. Las piezas tienen 3mm de espesor, y en conjunto pesan 110gr.
El servo que decis se ve piola, yo he sentido bueno comentarios de esa marca. Pero ni idea si sera de confianza el vendedor, nunca compre en ebay, y no se bien como es el sistema.

Algec, el software pienso programarlo en varias capas:
La capa 1 se va a encargar de controlar los servos, y los movimientos individuales de cada pata (por medio de los algoritmos de inverse kinematics). Esos movimientos pueden ser absolutos o relativos. Por ejemplo: "mover la pata a las coordenadas absolutas x, y, z", o bien, "desde la posicion actual, desplazar la pata un delta x, delta y, delta z".
La capa 2 estara a cargo de los movimientos complejos. O sea, de describir una determinada trayectoria (suelen usarse curvas bezier para los pasos) a una determinada velocidad.
La capa 3 se encargara de los movimientos coordinados entre varias patas. Posiciones estaticas, gestos, distintas formas de caminar (un paso a la vez, paso y medio, dos pasos y paso de tripode)

El primer paso es hacer la plaquita que controle los 18 servos, y comunicarla con la PC (tal vez via USB HID). Luego voy a programar la capa 1. Pienso hacer un programita en processing con una GUI, que me permita mover cada pata como yo quiera, grabar posiciones y luego reproducirlas. Con suerte, tal vez pueda programar alguna secuencia de movimientos (un baile o algo).

En resumen, no voy a usar tablas ni movimientos programados ni nada de eso. Voy a generar los movimientos en tiempo real, asi tengo mayor control, y ademas puedo combinar los movimientos (por ejemplo, que el bicho camine inclinado, agachado o con las patas extendidas). Si todo sale bien, quiero ponerle sensores de presion en las patas, para que pueda caminar por caminos irregulares.

Bueno, ese es el plan. La mala noticia es que tengo que comprar varias cosas (servos, reguladores switching, baterias lipo), y eso va a demorar un tiempo. Pero mientras voy investigando y compartiendo con ustedes lo que aprenda ;)
Título: Robot Hexapodo
Publicado por: Algec en 08 de Septiembre de 2012, 05:53:52
Gracias por tu aclaracion, me gustaria it colaborando en lo que mi tiempo me deje. Podrias decirme si has empezado a esturcturar el programa,si hiciste algunas cosas, ir avanzando en eso?
Por favor , dime, pegaras todo lo que hagas? Estoy interesado en todas esas rutinas
Título: Re: Robot Hexapodo
Publicado por: Algec en 08 de Septiembre de 2012, 10:43:24
Estuve mirando lo que dices, las curvas y demas. Cada vez estoy mas interesado,. Crees que ese pic sera suficiente para tanto calculo? no seria quizas mejor uno para el PWm y otro para calcular las trayectorias y demas?
Título: Re: Robot Hexapodo
Publicado por: gera en 08 de Septiembre de 2012, 13:21:23
La idea por ahora es utilizar el pic solamente para generar los PWM, y conectarlo a la PC, donde estara el software que realice los calculos y todo. Asi dispongo de mucho mayor poder de procesamiento para los calculos complejos.
Todavia no he programado nada porque aun no tengo todos los componentes para armar el bicho. A medida que vaya avanzando, voy a ir subiendolo aca, y los que quieran sumarse y colaborar, seran bienvenidos ;-)
Saludos!
Título: Re: Robot Hexapodo
Publicado por: Algec en 08 de Septiembre de 2012, 16:01:21
Entiendo, ahora comprendo lo que pretendes hacer, me parecia poca cosa ese pic para tanto trabajo.
A mi me interesaria hacerlo todo en un micro, he visto usar atmel para eso , pero supongo que pica tambien servira.
Lo que me interesa sobre manera es como hacen el desarrollo de los programas, no conozco atmel y uso CCS para pic. Hice hace años una araña pequeña en ensamblador y ni se donde esta el fuente.
He estado mirando y seguire haciendolo todo lo que publiques y estudiando lo que señalas. En lo que pueda ayudar, que sera poco segun veo, dimelo.
A ver si entre todos desarrollamos algo interesante.
Buscare los servos mas pequeños y mas baratos que encuentre porque pretendo hacer la mia del tamaño minimo posible, cuanto menos mejor en mi caso. Pero los algoritmos son los mismos y el pwm y demas tambien. Asi que todo me sirve.
Título: Re: Robot Hexapodo
Publicado por: pajaro en 09 de Septiembre de 2012, 18:20:50
Hola compañeros

Yo tambien llevo idea de hacerlo con un uC y control por emisora,
lo malo es el 18f2550 que tiene pocas patas, llevo pensado hacerle un modulo
que cuelgue de un bus por ejemplo ... i2c, y programado con ccs.

Un saludo.
Título: Re: Robot Hexapodo
Publicado por: AKENAFAB en 09 de Septiembre de 2012, 19:15:11
Hola compañeros

Yo tambien llevo idea de hacerlo con un uC y control por emisora,
lo malo es el 18f2550 que tiene pocas patas, llevo pensado hacerle un modulo
que cuelgue de un bus por ejemplo ... i2c, y programado con ccs.

Un saludo.


Brinca al 18F4550
Título: Re: Robot Hexapodo
Publicado por: Algec en 12 de Septiembre de 2012, 06:53:05
Mas dudas. Besenham o bezier,. A ver, el calculo de trayectorias se hace con besenham o bezier?, besenham parece que es trayectoria recta y bezier curvas.
Es asi? En ambos casos las rutinas devuelven sucesion de puntos de la s trayectorias que con la cimnematica inversa se pasan a angulo.
Tanto en uno como en otro, ¿donde hay librerias en 3D?, solo encuentro ejemplos en 2D, de x1 y 1 a x2 Y2.
¿O es que el eje  Z se ajusta como un valor fijo en cada trayectoria? ¿El calculo no lo incluye?
Pero si se quiere que los desplazamientos de cada pata sean en 3 D necesitarimos un algortimo que incluya esos 3d. igual que para la cinematica inversa.
¿Teneis librerias en C en algun compilador que pueda estudiarme?
Me da igual CCS o lo que sea, si es CCS mejor que mejor, si no se adapta.
Gracias
Título: Re: Robot Hexapodo
Publicado por: gera en 12 de Septiembre de 2012, 09:32:22
Algec, las curvas que yo voy a utilizar, son las Bezier. Con respecto a las dimensiones, pensa que podes formar una curva 3D a partir de dos curvas 2D, asi que es mas o menos lo mismo. O sea, si miras la pata desde el costado, vas a ver que describe una curva, parecida a una U invertida, y si la miras desde el frente vas a ver que describe una curva similar, dependiendo del movimiento que este haciendo el robot en ese instante (podria estar caminando de frente, de costado, o un poco de ambos). Es una simple composicion de movimientos.
Si queres ver algo de codigo fuente, echale una mirada a este proyecto: http://www.pablogindel.com/trabajos/samsa-ii-2010/
En este link (http://www.pablogindel.com/images/samsaiiv08.rar) tenes el codigo fuente en C++.

Saludos!!
Título: Re: Robot Hexapodo
Publicado por: Algec en 12 de Septiembre de 2012, 14:39:36
Bien asi si lo comprendo, baje el codigo que me dices, lo estuvemirando hace unos dias, asicomohice algunas rutinas de cogigo de bezier. El codigo del samsaII es muy completo pero entender un codigo completo por muy bien organizado que este es complejo.  De hecho no veo clara la estructura, es un buen lio de ficheros y no conozco bien el compilador que el utiliza.
De todas formas si tienes un diagrama de bloques me gustaria ver como pretendes organizar el codigo, yo es lo primero que voy a hacer antes de nada,.
Las rutinas de cinematica inversa y de bezier ya las tengo medio preparadas en base.
Una  cuestion mas. necsitas un pic para 18PWM, supongo que el que elejiste es capaz, o seran pwm por software a base de interrupciones?
Título: Re: Robot Hexapodo
Publicado por: gera en 12 de Septiembre de 2012, 18:57:52
De todas formas si tienes un diagrama de bloques me gustaria ver como pretendes organizar el codigo, yo es lo primero que voy a hacer antes de nada,.
Las rutinas de cinematica inversa y de bezier ya las tengo medio preparadas en base.
Una  cuestion mas. necsitas un pic para 18PWM, supongo que el que elejiste es capaz, o seran pwm por software a base de interrupciones?

No suelo hacer diagramas en bloques ni de ningun tipo para mis programas, ya que todos tienen mas o menos la misma estructura y trato de hacerlo lo mas intuitivo posible. Como mencione, voy a hacerlo por capas. Si veo que se vuelve muy complejo, probablemente lo documente.
El PWM lo voy a generar por software, ya que no tengo conocimiento de ningun pic que tenga 18 canales PWM. En principio voy a usar un pic18f2550, para poder comandar los servos por USB.
Saludos!!
Título: Re: Robot Hexapodo
Publicado por: gera en 18 de Septiembre de 2012, 16:31:07
Hola!! Alguien sabe cuánto puede llegar a consumir un microservo en un régimen relativamente normal? Necesito saberlo para diseñar la fuente.
No encontré ninguno de los reguladores que Akenafab mencionó más arriba. Pero pude conseguir este:
MC34063A
Wide Input Voltage Range: 3 V to 40 V
High Output Switch Current: Up to 1.5 A
Adjustable Output Voltage

Creen que con 1.5A me alcance para los 18 servos?
Saludos y gracias!
Título: Re: Robot Hexapodo
Publicado por: Suky en 18 de Septiembre de 2012, 16:35:40
El primer comentario del servo dice:

Citar
I checked the current draws on 5v: idle, about 10ma, freely moving full swing or with a little resistance, about 100-200ma, and stalled, 600ma.

Título: Re: Robot Hexapodo
Publicado por: gera en 18 de Septiembre de 2012, 17:51:10
Gracias Suky! No lo había visto.
200mA x 18 servos = 3.6A
Es mucho más de lo que pensaba. Tal vez pueda ponerle un transistor externo para llegar a los 3A, total es raro que se muevan los 18 servos simultáneamente.
Título: Re: Robot Hexapodo
Publicado por: pajaro en 19 de Septiembre de 2012, 19:08:33
Hola Gera

Que te parecen estas ideas...!

http://books.google.es/books?id=f3KxaU36QwoC&pg=PA29&lpg=PA29&dq=montaje+darlington&source=bl&ots=TFtJ5tLBlC&sig=IWNXy9J9RANJ5xiEZ9FFpn9Cxwc&hl=es&sa=X&ei=uz9aUNPmPJGShgf9-oGoBg&ved=0CEsQ6AEwCA#v=onepage&q=montaje%20darlington&f=false


http://www.google.es/url?sa=t&rct=j&q=7805%203a%20datasheet&source=web&cd=1&cad=rja&ved=0CCUQFjAA&url=http%3A%2F%2Fwww.fairchildsemi.com%2Fds%2FLM%2FLM7805.pdf&ei=ZT9aUL26HcqAhQej74GQCA&usg=AFQjCNE2Xad8EgqCuaouHDK-7j9MtCjWpQ

Un Saludo



Título: Re: Robot Hexapodo
Publicado por: willynovi en 23 de Noviembre de 2012, 17:19:38
Gracias Suky! No lo había visto.
200mA x 18 servos = 3.6A
Es mucho más de lo que pensaba. Tal vez pueda ponerle un transistor externo para llegar a los 3A, total es raro que se muevan los 18 servos simultáneamente.
Ahí esta la clave, el consumo lo puedes limitar con la cantidad de servos que mueves en simultaneo.
Lo que no se cual es el consumo cuando están poco cargados. Será cuestión de ensayarlos.
Título: Re: Robot Hexapodo
Publicado por: gera en 23 de Noviembre de 2012, 22:53:25
Muchas gracias por el consejo Willi, pero pienso utilizar un regulador switching ya que pueden manejar mas corriente y no disipan tanto calor.
Hoy mismo pedí unas muestras a TI del LM2596, el cual ya probé en otro proyecto y funciona de maravilla ;) Soporta 3A continuos y picos de 4.5A

Por cierto, les comento que decidí utilizar todos componentes SMD, ya que me vengo amigando con esta tecnología, y me permite achicar bastante los circuitos. Cuando tenga el diseño definitivo del circuito y el PCB lo comparto con ustedes ;)
Saludos!!
Título: Re: Robot Hexapodo
Publicado por: willynovi en 24 de Noviembre de 2012, 21:22:33
Hola Gera, tanto entusiasmo que le pones me han dado ganas de hacer algo parecido  :-/

Supongo que como vas por el lado del montaje superficial ya te has inclinado por el 18f4550  ;-)
No tanto por el tema de memoria para programa, sino por las I/O que al momento de mas adelante agregar sensores quizas el 18f2550 te resulte escaso.

Yo con montaje superficial no me animo todavía, ademas que no tengo equipo  :oops:

Estuve pensando en eso de la cinemática inversa y se me ocurrió algo para prescindir un poco, aunque no se que es lo mejor.

Pensaba en algo así como definir algunos movimientos pre establecido para cada pata, que en realidad es el mismo para cualquier pata.
Para esto se necesitaria armar una pata pero en ves de poner los servos habría que poner potenciometros y grabar los movimientos en una etapa previa, algo así como una etapa de aprendizaje.

Otro detalle que me surgió de ver el video del PhantomX es el tipo de servos a utilizar, mas que nada por el rango de giro, los que pusiste en el primer mensaje creo son de 60 grados y los veo un poco limitado.
Aunque no se si quieres darle la misma versatilidad que el PhantomX.

Operating speed: 0.10sec/60 degree

Eso es lo que esta especificado, pero no se si 60 grados es el rango o solo se refiere a la velocidad.
No estoy muy canchero con los servos pero poner el tiempo que tarda en hacer 60° parece que es lo habitual.
Título: Re: Robot Hexapodo
Publicado por: willynovi en 24 de Noviembre de 2012, 21:52:34
y con el tema del control de los servos como la llevas?

copio algunos links para referencia y tenerlos a mano para ir leyendolos

Programa para controlar X servos con 1 interrupción (PIC18 y PIC16) (http://www.todopic.com.ar/foros/index.php?topic=20918.0)
Algoritmo para controlar hasta 8 servos con una sola interrupción (en C) (http://www.todopic.com.ar/foros/index.php?topic=20335.0)
Título: Re: Robot Hexapodo
Publicado por: gera en 25 de Noviembre de 2012, 14:48:26
Hola Gera, tanto entusiasmo que le pones me han dado ganas de hacer algo parecido  :-/

Supongo que como vas por el lado del montaje superficial ya te has inclinado por el 18f4550  ;-)
No tanto por el tema de memoria para programa, sino por las I/O que al momento de mas adelante agregar sensores quizas el 18f2550 te resulte escaso.
[\quote]
Exacto! Es el pic que estaba pensando utilizar. El formato TQFP es muy pequeño y te permite ahorrar mucho espacio en la placa. Asique me viene de 10!

Citar
Estuve pensando en eso de la cinemática inversa y se me ocurrió algo para prescindir un poco, aunque no se que es lo mejor.

Pensaba en algo así como definir algunos movimientos pre establecido para cada pata, que en realidad es el mismo para cualquier pata.
Para esto se necesitaria armar una pata pero en ves de poner los servos habría que poner potenciometros y grabar los movimientos en una etapa previa, algo así como una etapa de aprendizaje.
[\quote]
Yo tambien pensaba en un principio utilizar movimientos predefinidos. Pero eso limitaria mucho las capacidades del robot, ya que solo podria realizar esos movimientos y nada mas. Si quisieras que haga movimientos nuevos, tendrias que programarlos. En cambio, con la cinematica inversa, tenes control total de la posicion de cada pata, pudiendo crear movimientos muy complejos sin la necesidad de mucha programacion.
Ademas podes hacer que el robot "adapte" sus movimientos. Por ejemplo, hay unos que tienen sensores de presion en las patas para detectar el contacto con el suelo. Esto les permite caminar por superficies irregulares.


Citar
Otro detalle que me surgió de ver el video del PhantomX es el tipo de servos a utilizar, mas que nada por el rango de giro, los que pusiste en el primer mensaje creo son de 60 grados y los veo un poco limitado.
Aunque no se si quieres darle la misma versatilidad que el PhantomX.

Operating speed: 0.10sec/60 degree

Eso es lo que esta especificado, pero no se si 60 grados es el rango o solo se refiere a la velocidad.
No estoy muy canchero con los servos pero poner el tiempo que tarda en hacer 60° parece que es lo habitual.

Esa es la velocidad del servo. Te dice que recorre 60º en 0.1 segundos. Sin embargo no requiero gran amplitud de movimiento, ya que pienso hacer un robot relativamente simple. Digamos que es un prototipo para ir familiarizandome con estos bichitos. Si todo sale bien, podria hacer una version mas robusta del robot ;)

Agradezco mucho tu interes en el proyecto! Por el momento estoy un poco demorado porq cuento con poco tiempo, pero voy a ir compartiendo todos mis avances!

Saludos!!!
Título: Re: Robot Hexapodo
Publicado por: pajaro en 06 de Diciembre de 2012, 20:31:30
Hola Gera
¿que tal compañero?
¿como te fue con el robot araña?
quien domina a quien?...
el Gera al robot o el robot a Gera?..jejeje
como te va con el pequeño invento

me acuerdo muy amenudo de este hilo, es mi espinita
nos podias deleitar con algun video

un saludo
Título: Re: Robot Hexapodo
Publicado por: gera en 09 de Diciembre de 2012, 12:40:45
Pajaro, qué tal?
Mira, el proyecto esta un poco parado porque la semana que viene estoy presentando mi trabajo de fin de carrera.
Sin embargo, ya pedi los componentes y estan en camino ;)
Compre 20 servos (http://www.hobbyking.com/hobbyking/store/uh_viewItem.asp?idProduct=16257), una bateria lipo (http://www.hobbyking.com/hobbyking/store/uh_viewItem.asp?idProduct=6306), unos reguladores LM2678 (http://www.ti.com/product/lm2678) y unos PIC18F4550 en formato TQFP.
Ademas un amigo se quiso sumar al proyecto y me va a dar una mano con la construccion y programacion. Por lo pronto tenemos que diseñar el circuito para poder controlar los 18 servos con el PIC.
Cuando lleguen las cosas y tenga algo armado lo comparto con uds!
Saludos y gracias por el interes!
Título: Re: Robot Hexapodo
Publicado por: willynovi en 09 de Diciembre de 2012, 15:53:15
Gera, a mi tambien me interesa este proyecto, por ahora estoy armando un simple programita en Visual C para controlar unos servos manualmente via HID.
En el PIC no tengo mucho desarrollado, la idea es hacer algo similar a los link que mas arriba te pasé.

Ya tenes alguna idea de como controlar los servos, digo mejor, resolución, cantidad de servos (supongo mínimo 18).

Si fuera necesario, te puedo dar una mano en algo y aunamos esfuerzos  ;-)
Título: Re: Robot Hexapodo
Publicado por: gera en 10 de Diciembre de 2012, 10:45:05
Hola Willy!!
Mi idea es hacer una aplicación para la PC en Processing y utilizar una comunicación USB-CDC porque es con lo que estoy más familiarizado. Está buena la idea de hacerlo HID, pero no tengo mucha experiencia con este perfil, sobretodo del lado de la PC. Me podrías contar un poco sobre eso?

En principio la aplicación facilitaría controlar los servos individualmente, grabar posiciones y movimientos predefinidos por el usuario. Luego iría por el tema de cinética inversa.
La placa la voy a diseñar para que permita conectar 20 servos (18 para las patas, dos por si el día de mañana le pongo una cabeza o algo). Seguro le voy a dar acceso a la UART del pic para debugging, ISCP, USB y algún LED de estado.
Qué opinas? Se me olvida algo?

Saludos!
Título: Re: Robot Hexapodo
Publicado por: willynovi en 10 de Diciembre de 2012, 20:17:08
Supongo que cada uno se siente cómodo con lo que ya ha aprendido.

Experimenté tanto con la API especifica de Microchip, con el CDC y por último con el HID porque tuve la necesidad de hacer un dispositivo de juegos que tenia salidas desde un simulador.

Si mal no recuerdo la parte de comunicación es similar y hoy no se decirte que ventajas hay sobre uno u otro, en su momento abandoné la API de Microchip porque no tenia compatibilidad con W7, aunque hoy quizás si la tenga.

Tanto el CDC como el HID creo que son aptos para la aplicación, aunque siempre teniendo en cuenta, y para empezar, que dependes del cordón umbilical.
De todos formas los programas para uno u otro modo de comunicación tienen que ser compatibles, obvio quitando la parte especifica de comunicación.

Cuando intentes hacer una comunicación inalambrica pensaras en bluetooth o similar.

Yo voy por HID porque mi idea es montar una netbook sobre el robot y luego comunicarme con otra PC por wi fi.

A medida que valla encontrando tiempo y avance con el tema de los servos voy colgando los avances.

Con respecto a lo de Processing no tengo mucha idea, igual creo que sigo con C para no perder lo avanzado.
Título: Re: Robot Hexapodo
Publicado por: gera en 17 de Diciembre de 2012, 20:49:10
Cuando intentes hacer una comunicación inalambrica pensaras en bluetooth o similar.

Yo voy por HID porque mi idea es montar una netbook sobre el robot y luego comunicarme con otra PC por wi fi.

A medida que valla encontrando tiempo y avance con el tema de los servos voy colgando los avances.

Con respecto a lo de Processing no tengo mucha idea, igual creo que sigo con C para no perder lo avanzado.

Exacto, pienso utilizar un modulo bluetooth. Estos modulos funcionan como un puente serial, por lo tanto una vez definida la trama, puedo utilizar el puerto serie del pic, el USB o el modulo bluetooth indistintamente. Por eso digo de usar USB-CDC.
Mi robot es muy pequeño como para montarle una notebook encima. Sin embargo tengo la duda de por que le montarías una notebook  :huh:

Bueno, de paso les comento que una primera version del circuito. Utilizo un regulador switching LM2678 para la alimentacion. Entrega hasta 5A, asique creo que voy a estar sobrado.
El modulo central tiene un PIC18F4550, con todos los pines para conectar los servos, un conector ICSP, puerto USB, y aún me falta ver como voy a hacer con el modulo bluetooth, ya que tengo que hacer una adaptacion de tensiones de 5V a 3.3V.
Obviamente aún falta bastante, pero les muestro un adelanto de como esta quedando ;)

(http://s8.postimage.org/tny8vms01/board.png) (http://postimage.org/image/tny8vms01/) (http://s8.postimage.org/jrx5vzm81/esquema.png) (http://postimage.org/image/jrx5vzm81/) (http://s8.postimage.org/3uydz9ttt/fuente.png) (http://postimage.org/image/3uydz9ttt/)

Acepto críticas y sugerencias de cualquier tipo.
Gracias y saludos!!
Título: Re: Robot Hexapodo
Publicado por: willynovi en 17 de Diciembre de 2012, 23:04:41
El tema de montar la netbook ensima es para en un futuro darle mas autonomia con algún reconocimiento de imagen o a sensores de distintos tipos.

Estuve investigando un poco el tema del control de los servos, si bien estoy en etapa de investigación y madurar conceptos, vi algunos ejemplos de hasta 33 servos y los comentarios son buenos, el tema es que usan instrucciones de direccionamiento indirecto y ahí medio que me perdí, así que me he puesto a ver como es que trabaja el programilla.

Les dejo unos links por si quieren darle un vistazo.
IMPOSSIBLE? 30 Servos with USART Comm on Single 40-pin PIC (http://www.mikroe.com/forum/viewtopic.php?t=7081)
Drive 33 Servos With One PIC + USART (http://www.electro-tech-online.com/microcontrollers/34390-drive-33-servos-one-pic-usart-2.html#post264972)
Título: Re: Robot Hexapodo
Publicado por: gera en 18 de Diciembre de 2012, 00:43:52
Ahh ok. Lei muy rapido los ejemplos que me enviaste, y si no me equivoco, es el mismo metodo para generar ondas de PWM que nos muestra Manolo aqui:
http://www.micropic.es/mpblog/2007/09/generacion-de-3-pwm-probamos-led-rgb/

Es justamente el metodo que pienso utilizar. Con una interrupcion de timer y un contador, primero pones todos los pines en alto, y a medida que el contador va alcanzando los valores de duty de cada servo, vas poniendo los pines en bajo. En el link que puse esta mucho mejor explicado.
Cuando tenga la placa lista, haremos unas pruebas a ver que tal funciona ;)

Saludos!!
Título: Re: Robot Hexapodo
Publicado por: Nocturno en 18 de Diciembre de 2012, 02:08:22
¡Muy bien exprimidos esos micros para sacar 30pwm!
Título: Re: Robot Hexapodo
Publicado por: willynovi en 18 de Diciembre de 2012, 10:22:22
Ahh ok. Lei muy rapido los ejemplos que me enviaste, y si no me equivoco, es el mismo metodo para generar ondas de PWM que nos muestra Manolo aqui:
http://www.micropic.es/mpblog/2007/09/generacion-de-3-pwm-probamos-led-rgb/

No pude bajar el archivo con el proyecto, sería posible al menos disponer del código por aquí?

Lo que pude ver en los ejemplos que puse mas arriba, es que se atiende los servos primero en la interrupción y luego queda libre el micro para recibir los datos.

Bosquejando un poco sería,
La rutina de interrución dura 2,5mseg y luego sale para atender la recepción de datos durante los 17,5mseg restantes para completar el período de 20mseg.
Dentro de la rutina de interrupción se hace como decis vos, (según la frecuencia de trabajo del micro y el tiempo de instrucción se puede llegar a mayor resolución, aunque creo que contar con una resolución mayor a 100 puntos ya es mucho y los ejemplos son de 256).
Primero hace un delay de 0,5mseg y luego en un loop de 256 pasos (maxima resolucion) decrementa un contador por cada servo para que aproximadamente se cumpla el proceso en 2,5mseg.

No me resulta complicado el proceso, pero lo que alcancé a entender que con el direccionamiento indirecto se logra bajar la cantidad de instrucciones de la rutina de servicio de la interrupción, que puede ser critico si se trabajara con un uC con limitaciones en la frecuencia de trabajo, aunque no creo que sea un problema con nuestro 18f4550.

Lo otro que pensaba es que nuestro PIC de comando de servos tiene que ser medio "bobo", o sea, recibe datos y mueve servos, no creo que se le pueda pedir mucho mas.
Título: Re: Robot Hexapodo
Publicado por: gera en 18 de Diciembre de 2012, 13:52:23
Yo creo que 256 es una resolución aceptable. 60º/256 nos da una resolución de 0.23º.

No me resulta complicado el proceso, pero lo que alcancé a entender que con el direccionamiento indirecto se logra bajar la cantidad de instrucciones de la rutina de servicio de la interrupción, que puede ser critico si se trabajara con un uC con limitaciones en la frecuencia de trabajo, aunque no creo que sea un problema con nuestro 18f4550.

Lo otro que pensaba es que nuestro PIC de comando de servos tiene que ser medio "bobo", o sea, recibe datos y mueve servos, no creo que se le pueda pedir mucho mas.

El 18F4550 es muy potente, y trabajando a 48MHz el control de los servos no va a ser problema. Además, como se trabaja por interrupción de timer, el procesador no va a quedar bloqueado. Habría que ver si hay conflictos con las interrupciones cuando llegan datos por el puerto serie (sea fisico o virtual). Supongo que puede resolverse estableciendo bien las prioridades.

En principio mi idea es enviar desde la PC una trama que contenga las posicion deseada de cada servo. Por ej:
"128,0,100,x,x,25,...\r\n"
Donde "x" significa sin cambios. También podría actualizarse la posición de cada servo por separado. Por ej:
"S01:128\r\n"
Donde "S01" sería un ID del servo, y luego la posición deseada.
Creo que el primer método es más conveniente, ya que los servos se van a actualizar simultáneamente y la trama es más corta en caso de actualizarlos a todos juntos. Aunque podrian implementarse ambos métodos a la vez.

Sin embargo, en el futuro pienso darle cierta autonomia al robot. Por lo tanto el micro seria el responsable de hacer los calculos de las posiciones de las patas y no la PC. Si en esa etapa me quedo corto con el micro, voy a dejar un micro dedicado a generar las señales PWM, y otro que realice los calculos y le envie las posiciones de los servos.

Qué opinan?
Saludos!!
Título: Re: Robot Hexapodo
Publicado por: willynovi en 18 de Diciembre de 2012, 15:36:41
Cuando dices 48Mhz te refieres al oscilador interno cuando el externo es de 20Mhz?

De la forma que pienso la rutina de interrupción es bloqueando el main(), es decir, hasta que no termina la modulación del pulso de 2,5mseg (todos los servos a la vez) no vuelve al programa principal.
Por ahí se podría ver la forma de llevar esos 2,5mseg a solo 2mseg si el ancho del pulso inicial para indicar la posicion cero del servo la manejamos con una interrupción.

De esta forma podemos tener una buena resolución del movimiento de los servos, que está claro que 256 ya es suficiente  ;-)

Así tendríamos ocupado el micro máximo 12,5% con la atención de los servos.

Hago este análisis solo para compararlo con lo compartido por Guillermo haya por el 2008, que su programa se basa principalmente en interrupciones, pero está limitado en la resolución.

Si nos vamos por el lado que el PIC dedicado al control del servo sea "bobo" creo que con 17,5mseg tiene que alcanzar para transmitir nuestros datos, que si fueran 30 servos estariamos enviando 30 bytes.
Creo que es por donde tenemos que ir, y si fuera necesario alguna autonomia del robot dedicar otro micro "cerebro", siempre pensando que cualquier calculo matematico resulta pesado para nuestro PIC.

La forma mas eficiente de pasar los datos creo que es indicando directamente la posicion de cada servo uno a continuación del otro.
No entiendo mucho eso de poner una X, creo que trae problemas, en definitiva es un byte.
Tambien hay que recordar que cada 20mseg tenemos que refrezcar el valor de cada servo para realizar el decrementeo de cada uno en la rutina de manejo de servos. Con cargarle nuevamente el valor es suficiente.
Como decis vos Gera, enviar la trama completa es mas conveniente, aunque por alguna cuestion de pruebas se podria enviar un valor puntual a cada servo. Implementando el primer byte como un código y que a partir del segundo byte sea los valores de cada servo, y en otro caso el número de servo y la posición. Supongo que esto es un simple detalle  ;-)

Lo que yo opino es que estamos alineados, salvo por el tema de la comunicación  :D

Pregunta, aunque espero poder respondermela solo cuando haga los calculos  :P
Es posible saber cual es la cantidad máxima de bytes que se pueden enviar en 17,5mseg a un determinado baud rate?
La misma pregunta pero para una comunicación HID full speed?
Título: Re: Robot Hexapodo
Publicado por: gera en 18 de Diciembre de 2012, 16:10:06
48MHz sería la frecuencia del oscilador interno (el pic ejecutaria a 12MIPS). Se obtiene a partir de 4MHz pasados por un PLL que los multiplica por 12. Y a su vez, esos 4MHz pueden provenir de un cristal de 12, 16 o 20MHz. En la hoja de datos del 18F4550 hay todo un apartado para la configuracion de los osciladores.

Creo que te estas enroscando demasiado los tiempos. O quizas yo estoy subestimando la complejidad del problema jeje. El procesador ni se va a enterar de las interrupciones. O sea, vamos a tener una interrupcion de timer que lo unico que va a hacer es incrementar un entero y compararlo con los distintos duty de cada señal PWM que tengamos.
El periodo de esa interrupcion depende del periodo de la señal de PWM, que en nuestro caso es de 20ms. En esos 20ms debemos interrumpir tantas veces como valores diferentes (resolucion) deseemos. Entonces 20ms/256=78.125us. Comparado con los 0.083us que demora un ciclo de ejecución, nos da una eternidad para realizar procesamiento entre una interrupcion y otra.

Con respecto a tu pregunta, si se puede calcular cuanto demora una trasmision de N bytes a una determinada velocidad. Sin embargo no creo que importe, ya que la idea es administrar la recepcion por interrupcion. O sea que cuando llegue la trama, se almacena en un buffer y luego se la puede procesar en el bucle principal.
Título: Re: Robot Hexapodo
Publicado por: willynovi en 18 de Diciembre de 2012, 20:43:28
Si puede ser que me esté enroscando. Hasta que no haga algo de programa no debería hacer muchos cálculos mas  :D

Recuerda que si bien el periodo del PWM es de 20mseg, los 256 pasos no son en esos 20mseg, sino que en los primeros 2,5mseg.

Lo del tiempo de instrucción y los calculos del timer voy a tener que repasar la hoja de datos como decis, son cosas que se me olvidan muy facil  :lol:

Mi configuracion es así
Código: [Seleccionar]
        #pragma config PLLDIV   = 5         // (20MHz crystal)
        #pragma config CPUDIV   = OSC1_PLL2   
        #pragma config USBDIV   = 2         // Clock source from 96MHz PLL/2
        #pragma config FOSC     = HSPLL_HS
Luego calculo bien el TCY, aunque si alguien lo calculara o me diera una ayudita no me ofendo  ;-)
Título: Re: Robot Hexapodo
Publicado por: gera en 18 de Diciembre de 2012, 21:45:44
Recuerda que si bien el periodo del PWM es de 20mseg, los 256 pasos no son en esos 20mseg, sino que en los primeros 2,5mseg.
[\quote]

Tenes razon! Me habia olvidado de eso jeje.

Citar
Lo del tiempo de instrucción y los calculos del timer voy a tener que repasar la hoja de datos como decis, son cosas que se me olvidan muy facil  :lol:

Mi configuracion es así
Código: [Seleccionar]
        #pragma config PLLDIV   = 5         // (20MHz crystal)
        #pragma config CPUDIV   = OSC1_PLL2   
        #pragma config USBDIV   = 2         // Clock source from 96MHz PLL/2
        #pragma config FOSC     = HSPLL_HS
Luego calculo bien el TCY, aunque si alguien lo calculara o me diera una ayudita no me ofendo  ;-)

Veo que programas en C18. Yo pienso hacerlo en CCS. La configuración de los fuses se ve bien, es la misma que uso yo en mis proyectos con USB ;)

Igual todavía no me quiero meter con el código hasta que tenga el hardware listo. Estoy pensando que me puedo estar olvidando, para luego no arrepentirme cuando tenga la placa ya hecha (pasa mas seguido de lo q parece). Hasta ahora tengo los pines para los servos, un puerto para la programacion en circuito, USB, un par de leds de estado, y no se si poner un pulsador, o entradas para sensores ultrasonicos... Para el modulo bluetooth tengo q hacer una adaptacion de niveles de tension, eso esta pendiente.
Que creen que se me puede estar olvidando??
Saludos!
Título: Re: Robot Hexapodo
Publicado por: willynovi en 20 de Diciembre de 2012, 12:44:51
Hasta ahora tengo los pines para los servos, un puerto para la programacion en circuito, USB, un par de leds de estado, y no se si poner un pulsador, o entradas para sensores ultrasonicos... Para el modulo bluetooth tengo q hacer una adaptacion de niveles de tension, eso esta pendiente.
Que creen que se me puede estar olvidando??

Si optas por un bootloader USB vas a necesitar un pulsador para entrar en modo bootloader.
El bootloader Serie no lo conozco, así que no se que necesitarias, lo mismo que si fuera por bluetooth.

Yo cuando hago alguna placa siempre dejo todos los pines disponibles y con una linea de pines a GND por si hubiera que jumpearlos para no usarlos.
Si fuera algo específico, por ejemplo una entrada analógica, le dejo un pin a GND y otro a +5V. Siempre un pin a GND y otro a +5V cerca de un grupo de entradas/salidas del micro.
Tengo esa costumbre porque hago placas muy genéricas, como si fueran entrenadoras.

Por el tema de los Led o pulsadores quizas te conviene poner algún jumper por si mas adelantes tuvieras que disponer como entrada/salida para otra aplicación.
Por lo que alcancé a ver tienes lugar de sobra en el PCB que estas diseñando.

Vi que un par de rutas no te quedaron bien dibujadas o las dejas así con un propósito? Por ejemplo el GND del USB.
Título: Re: Robot Hexapodo
Publicado por: Miquel_S en 20 de Diciembre de 2012, 13:44:45
Un apunte gera, estoy viendo que alimentas el micro con la misma alimentacion de los servos, yo siempre habia leido que era conveniente alimentarse por separado por problemas de interferencias, y como comenta willynovi tienes el GND del USB sin conectar.
Te dejo el esquema de una controladora que hice:

http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=39455.0;attach=19764
http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=39455.0;attach=19765
http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=39455.0;attach=19766

Saludos!
Título: Re: Robot Hexapodo
Publicado por: gera en 20 de Diciembre de 2012, 14:10:00
Miguel, buena observación. Le voy a poner un regulador lineal para alimentar al pic, y voy a dejar la fuente switching para alimentar a los servos. La señal GND no esta ruteada porq va con un plano a masa.
Muchas gracias por el consejo!

PD: ahora le pego un vistazo a tu controladora ;) gracias por compartir!
Título: Re: Robot Hexapodo
Publicado por: willynovi en 21 de Diciembre de 2012, 12:23:32
Un apunte gera, estoy viendo que alimentas el micro con la misma alimentacion de los servos, yo siempre habia leido que era conveniente alimentarse por separado por problemas de interferencias, y como comenta willynovi tienes el GND del USB sin conectar.
Te dejo el esquema de una controladora que hice:

http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=39455.0;attach=19764
http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=39455.0;attach=19765
http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=39455.0;attach=19766

Saludos!
Miguel, estuve siguiendo tus hilos por el tema del movimiento del servo, ya lo tenes andando bien?

La idea de Gera y mia es poder controlar mínimo 20 servos, es lo que necesita el hexapod, bueno en realidad 18 pero hacemos 20 para redondear  ;-)
Gera anda con la controladora con montaje superficial, yo voy por una trough hole, pero en ambos casos con el 18f4550.
Por ahí si quieres sumarte al desarrollo seria bueno si podes pasarte a este micro así compartimos programa.

Si has tenido algún problema para hacer funcionar el bootloader del 18f4550 me avisas y te doy una mano, te paso los proyectos  ;-)

Estos días creo que voy a tener tiempo libre para hacer cuentusas de instrucciones, así que espero para la semana que viene tener novedades.
Título: Re: Robot Hexapodo
Publicado por: MGLSOFT en 21 de Diciembre de 2012, 12:58:08

El modulo central tiene un PIC18F4550, con todos los pines para conectar los servos, un conector ICSP, puerto USB, y aún me falta ver como voy a hacer con el modulo bluetooth, ya que tengo que hacer una adaptacion de tensiones de 5V a 3.3V.


Yo uso un integrado de Texas para adaptar de 5 a 3.3V (despues te cuento como va) es el TPS73033DBVRG4.
Título: Re: Robot Hexapodo
Publicado por: elgarbe en 21 de Diciembre de 2012, 13:17:52
Muy buen proyecto!!!
Lo estoy siguiendo de cerca, quizá en algún momento me sume...

Una consulta muy básica quizá, es mucho más trabajo usar PaP (por ejemplo los miniaturas de las disqueteras) que unos servos?
Lo que yo veo es que el PaP necesitará el hardware de control (potencia + control de Paso/Dir) y algo para sensar la posicion e inicializar a una posicion conocida, eso el servo ya lo trae. Pero no tendria alguna ventaja? como el torque, el posicionamiento? tengo como 100 de esos motores y pense que un buen uso sería un proyecto de este tipo, pero viendo sus avances, veo que con servos parece mucho más fácil.

Saludos!
Título: Re: Robot Hexapodo
Publicado por: Miquel_S en 23 de Diciembre de 2012, 09:12:53
Perdonad chicos por no haber contestado antes, pero ahora mismo estoy con el móvil ya que llevó  tres días sin Internet, gracias por la oferta wllly pero contigo y con gera al frente lo único que pudo hacer es seguir el hilo y aprender de los maestros.
Hola elgarbe referente a saber la posición, con el servo también es posible añadiéndole un cuarto cable.

Saludos!
Título: Re: Robot Hexapodo
Publicado por: gera en 23 de Diciembre de 2012, 15:23:52
Miquel, ahí estuve viendo tu diseño y me diste un par de ideas ;) esta piola eso de poner el micro a 45º jeje. Cómo haces para alimentar el circuito y los servos? Tenes una fuente externa?

Yo uso un integrado de Texas para adaptar de 5 a 3.3V (despues te cuento como va) es el TPS73033DBVRG4.

Se lo ve interesante. Sin embargo con un regulador lineal comun y silvestre creo que voy a andar bien. Tengo un lm1117 de 3.3V, y si no será el viejo y conocido lm317. La adaptación de niveles de las lineas TX y RX la pienso hacer con un mosfet y una resistencia.

Tambien pienso descartar el USB, ya que voy a utilizar un modulo bluetooth.

Una consulta muy básica quizá, es mucho más trabajo usar PaP (por ejemplo los miniaturas de las disqueteras) que unos servos?

Es posible utilizar motores PaP, nada te lo impide. Pero en mi opinion es bastante mas complicado que con servos. Como vos decis, necesitas mucha circuiteria para alimentarlos y controlarlos. Y al no tener un tipo de realimentacion, es dificil controlar su posicion. No creo que tenga alguna ventaja sobre los servos (respecto al torque, se consiguen servos de mayor torque a los que uso yo).

Bueno, en breve estare terminando el diseño de la placa y fabricandola. Y ya sera hora de ponerse con el programa ;)
Muchas gracias por su interes en este proyecto, y por su participacion! :D

Saludos!
Título: Re: Robot Hexapodo
Publicado por: Miquel_S en 25 de Diciembre de 2012, 11:52:09
Miquel, ahí estuve viendo tu diseño y me diste un par de ideas ;) esta piola eso de poner el micro a 45º jeje. Cómo haces para alimentar el circuito y los servos? Tenes una fuente externa?
Hola gera, en principio si estoy usando una fuente externa para ir haciendo pruebas. Mi idea es hacer una pcb dedicada solo a la alimentacion, pero primero debo calcular el consumo de los servos y todavia no tengo claro si lo hare con transistores.

Saludos!
Título: Re: Robot Hexapodo
Publicado por: gera en 27 de Diciembre de 2012, 11:47:51
Hola gera, en principio si estoy usando una fuente externa para ir haciendo pruebas. Mi idea es hacer una pcb dedicada solo a la alimentacion, pero primero debo calcular el consumo de los servos y todavia no tengo claro si lo hare con transistores.

Saludos!

Yo hice mis calculos, y en el peor de los casos (todos los servos andando juntos) pueden consumir unos cuantos amperes. Por eso utilizo un regulador switching de 5A. Sin embargo el consumo depende del torque, y si los servos hacen mucha fuerza pueden consumir mas.
No entiendo para que usarias transistores. Los servos tienen su propia alimentacion, y el pin por el cual envias la señal es de alta impedancia, no consume corriente.

Bueno, creo que ya tengo el circuito definitivo de la placa controladora:

(http://s2.postimage.org/b01btnjw5/board.png) (http://postimage.org/image/b01btnjw5/) (http://s2.postimage.org/5r6avs1h1/esquema.png) (http://postimage.org/image/5r6avs1h1/) (http://s2.postimage.org/kbndqlwfp/fuente.png) (http://postimage.org/image/kbndqlwfp/)

Describo sus caracteristicas:
-Regulador LM7805 on board: De aqui sacamos los 5V para alimentar al micro independientemente de los servos. Estimo que el circuito consumira un poco mas de 100mA (entre el micro @48Mhz, los LEDs y el modulo bluetooth). Preferi el LM7805 antes que el LM78L05 para estar sobrado. Los servos se alimentan con una fuente switching externa.
-Permite controlar hasta 20 servos.
-Puerto ISCP.
-LVD (low voltage detect): Permite detectar cuando la batería esta baja por medio de una interrupción. Las baterías LiPo no deben bajar de cierto nivel de tension, si no se dañan.
-Comunicacion Bluetooth: A traves de la UART del PIC y un modulo bluetooth (http://dx.com/p/jy-mcu-arduino-bluetooth-wireless-serial-port-module-104299). Descubri q el mismo es Arduino compatible, por lo tanto funciona con 5V y no tengo q adaptar tensiones.

Creo que eso es todo. Como siempre, acepto sugerencias, criticas y respondo cualquier duda :P
Saludos!!!
Título: Re: Robot Hexapodo
Publicado por: AKENAFAB en 27 de Diciembre de 2012, 13:42:29
Se ve muy bien tu pcb.

Te recomiendo colocarle unos orificios para el montaje de la pcb.



Saludos!
Título: Re: Robot Hexapodo
Publicado por: gera en 27 de Diciembre de 2012, 14:04:31
Se ve muy bien tu pcb.

Te recomiendo colocarle unos orificios para el montaje de la pcb.



Saludos!

Muchas gracias! En un principio tenia unos orificios, pero me di cuenta de que no tenia espacio en el cuerpo del bicho para montar la placa. Asiq decidi montarla sobre los servos y agarrarla con goma autoadhesiva o algo por el estilo.
Cuando me lleguen los servos y tenga el cuerpo del robot armado les muestro mas o menos como queda ;)
Título: Re: Robot Hexapodo
Publicado por: Miquel_S en 27 de Diciembre de 2012, 17:14:12
Hola gera, la idea de los transistores seria para poder aumentar la intensidad, yo estuve mirando unos servos de la marca hitec y casi llego a los 7Amp.
LVD (low voltage detect) gracias por el dato no sabia de esto.

Saludos!
Título: Re: Robot Hexapodo
Publicado por: willynovi en 27 de Diciembre de 2012, 20:24:13
Hola gera, la idea de los transistores seria para poder aumentar la intensidad, yo estuve mirando unos servos de la marca hitec y casi llego a los 7Amp.
LVD (low voltage detect) gracias por el dato no sabia de esto.

Saludos!
Volvi del retiro Navideño  8)
Estuve avanzando con el programa pero como estaba fuera de casa no hice pruebas con servos, en estos días les cuento  ;-)

Miguel, lo que te dice Gera es que la linea de señal al servo desde el PIC no lleva corriente o muy poco, entonces no es necesario el transistor o similar, no vas a tener problema si conectas directo PIC -> Servo.

Gera, estoy viendo de adquirir un módulo Bluetooth, vos ya tenes uno, o estas pensando adquirir ese del link?
En cualquiera de los dos casos, cual viene mejor? Se que algunos son mas funcionales que otros.
Título: Re: Robot Hexapodo
Publicado por: Darkman_A en 27 de Diciembre de 2012, 20:58:13
Hola gera.
Una consulta.¿ El LVD lo haces con la entrada V_sens ?
Saludos
Título: Re: Robot Hexapodo
Publicado por: Darkman_A en 27 de Diciembre de 2012, 21:14:05
Hola gera, la idea de los transistores seria para poder aumentar la intensidad, yo estuve mirando unos servos de la marca hitec y casi llego a los 7Amp.
LVD (low voltage detect) gracias por el dato no sabia de esto.

Saludos!
Volvi del retiro Navideño  8)
Estuve avanzando con el programa pero como estaba fuera de casa no hice pruebas con servos, en estos días les cuento  ;-)

Miguel, lo que te dice Gera es que la linea de señal al servo desde el PIC no lleva corriente o muy poco, entonces no es necesario el transistor o similar, no vas a tener problema si conectas directo PIC -> Servo.

Gera, estoy viendo de adquirir un módulo Bluetooth, vos ya tenes uno, o estas pensando adquirir ese del link?
En cualquiera de los dos casos, cual viene mejor? Se que algunos son mas funcionales que otros.

Hola willynovi.
De esos modulos vienen 2 tipos. Uno que es slave y otro que es master/slave.
El modulo de la foto tiene la plaqueta adaptadora de tensiones. Podes comprarlos ya soldados o el modulo y la plaqueta separados. El modulo funciona con 3.3V y la plaqueta lo convierte a 5Vcc (o 6Vcc como dice ahi). Si vas a utilizar el modulo a 3.3V no necesitas que este soldado a la plaqueta, por eso es que se pueden conseguir por separado (mi caso).
Ahora que recuerdo tambien viene una plaqueta (o modulo + plaqueta ) con niveles RS232 compatibles, por lo tanto no necesitarias un MAX232, llegado el caso.
Saludos.
Título: Re: Robot Hexapodo
Publicado por: gera en 27 de Diciembre de 2012, 21:18:14
Gera, estoy viendo de adquirir un módulo Bluetooth, vos ya tenes uno, o estas pensando adquirir ese del link?
En cualquiera de los dos casos, cual viene mejor? Se que algunos son mas funcionales que otros.

Tengo varios modulos. Entre ellos un JY-MCU (el del link) y un RN-41. El primero tiene la ventaja que de que sale 8 dolares aprox, y funciona con 5V. El RN-41 es bastante mas caro (yo lo compre a sparkfun) y funciona con 3.3V, por lo tanto necesita adaptacion de tensiones. Sin embargo lo he probado bastante y funciona de 10. Con el JY-MCU no he hecho pruebas aun.

Hola gera.
Una consulta.¿ El LVD lo haces con la entrada V_sens ?
Saludos

Exacto. Busca en la hoja de datos del PIC, en la seccion de HLVD. Podes configurarlo de varias maneras. Te permite sensar la misma tension de alimentacion del PIC, o una tension externa que entre por el pin RA5/HLVD. En mi caso, utilizo un divisor resistivo para saber cuando la tension de la bateria baja de los 10,2V. Cuando ocurre eso, se activa una interrupcion.

Saludos!!
Título: Re: Robot Hexapodo
Publicado por: Miquel_S en 28 de Diciembre de 2012, 03:50:33
Hola willynovi, lo de los transistores no es para el control de los servos, ahí no tengo problemas, seria en la fuente de alimentación a la salida del integrado para aumentar la corriente para alimentar dichos servos.

Saludos!
Título: Re: Robot Hexapodo
Publicado por: gera en 28 de Diciembre de 2012, 09:30:25
Hola willynovi, lo de los transistores no es para el control de los servos, ahí no tengo problemas, seria en la fuente de alimentación a la salida del integrado para aumentar la corriente para alimentar dichos servos.

Saludos!

Ahhh ahora entiendo jeje. Si, podes ponerle un transistor a un regulador para sacarle mas corriente. Pero yo te recomiendo un regulador switching. Son mas eficientes, disipan menos calor y entregan bastante corriente :wink:
Título: Re: Robot Hexapodo
Publicado por: willynovi en 30 de Diciembre de 2012, 19:30:06
Algunas pruebas que hice, con los pocos servos que tengo en casa (4), que incluso la prueba la hago con solo uno  :lol:

Lo que estoy descubriendo es que tengo un problema de ruido, como llego a esa conclusión?

Resulta que hice un programita que atiende las posición de los servos, cantidad 18 hasta ahora porque estoy con el 18f2550, pongo posiciones fijas de a saltos de 10 grados para probar el movimiento de cada servo, es decir, algo así:

Servo[0] = 100
Servo[1] = 90
Servo[2] = 80
.......

osea cada salida tiene ese valor fijo y no lo actualizo en ningún momento.

Y con el mismo servo voy conectando a las distintas salidas que tengo definidas como los servos.

Aparentemente la atención a los servos anda bien porque cuando cambio de una salida a la otra el servo cambia su posición en esos 10 grados de giro, hasta ahí venimos bien.

Pero resulta que el programita que enviaría los datos por el USB se queda tildado, al parecer como que pierde la comunicación con la placa al filtrarse algo de ruido por la conexión y desconexión del servo.

El programita que utilizo es el que provee como ejemplo Microchip, "HID PnP Demo.exe"
Este programita censa el estado de un switch y en algun momento deja de mostrarme el estado, lo que me indica que ha perdido la comunicación.

Ahora, mientras no conecto el servo el programa se mantiene funcionando correctamente.

Les comparto las partes del código donde atiendo a los servos, principalmente es la rutina de la interrupción por TMR0. La base del código es del ejemplo de gu1llermo, o sea generando una interrupción cada 0,04 mseg, lo que me da una resolución de 50 pasos. En breve pruebaré con 100 a ver que hace  ;-)

Código: [Seleccionar]
/** CONSTANTS ******************************************************/
#define left 65160 // TMR0 Value for 0,5 msec
#define right 52410 // TMR0 Value for 17,5 msec
#define middle 65505 // TMR0 Value for 40 usec (0,04 msec)

Código: [Seleccionar]
void YourHighPriorityISRCode()
{
//Check which interrupt flag caused the interrupt.
//Service the interrupt
//Clear the interrupt flag
//Etc.
if(INTCONbits.TMR0IF)
{
// Rutine to serve all servos
// it has to last 2 msec, if first 0,5 msec are driven by TMR0 interrupt, else 2,5 msec
if(Fase == 52)
{
WriteTimer0(left); // Timer for 0,5 msec
mSERVO_All_On(); // At 0,0 msec all servo pin must go ON
Fase = 0;
INTCONbits.TMR0IF = 0; // Clear interrupt flag
}
if((Fase >= 0) && (Fase < 51))
{
WriteTimer0(middle); // Timer for 20 usec
if (Servo[0] == Fase){mSERVO_0_Off();} // If servo pos < Fase then servo pin OFF
if (Servo[1] == Fase){mSERVO_1_Off();}
if (Servo[2] == Fase){mSERVO_2_Off();}
if (Servo[3] == Fase){mSERVO_3_Off();}
if (Servo[4] == Fase){mSERVO_4_Off();}
if (Servo[5] == Fase){mSERVO_5_Off();}
if (Servo[6] == Fase){mSERVO_6_Off();}
if (Servo[7] == Fase){mSERVO_7_Off();}
if (Servo[8] == Fase){mSERVO_8_Off();}
if (Servo[9] == Fase){mSERVO_9_Off();}
if (Servo[10] == Fase){mSERVO_10_Off();}
if (Servo[11] == Fase){mSERVO_11_Off();}
if (Servo[12] == Fase){mSERVO_12_Off();}
if (Servo[13] == Fase){mSERVO_13_Off();}
if (Servo[14] == Fase){mSERVO_14_Off();}
if (Servo[15] == Fase){mSERVO_15_Off();}
if (Servo[16] == Fase){mSERVO_16_Off();}
if (Servo[17] == Fase){mSERVO_17_Off();}
Fase++;
INTCONbits.TMR0IF = 0; // Clear interrupt flag
}
if(Fase == 51)
{
WriteTimer0(right); // Timer for 17,5 msec
Fase++;
INTCONbits.TMR0IF = 0; // Clear interrupt flag
}

}
#if defined(USB_INTERRUPT)
USBDeviceTasks();
#endif

} //This return will be a "retfie fast", since this is in a #pragma interrupt section

Código: [Seleccionar]
OpenTimer0(TIMER_INT_ON & T0_16BIT & T0_SOURCE_INT & T0_PS_1_16);
INTCON2bits.TMR0IP = 1; // High priority for Timer0
RCONbits.IPEN = 1; // Enable priority levels
INTCONbits.GIEH = 1; // Enable interrupts
WriteTimer0(1785); // Timer for 85 msec -> only for first interrupt

Lo siguiente es modificar un poco el programa host (en la PC) para poder enviar los datos de los servos y poder variar la posición de cada uno, por el momento con un simple valor manejado con un control slide.
Título: Re: Robot Hexapodo
Publicado por: gera en 31 de Diciembre de 2012, 00:56:45
Willy, bien ahi por los avances!!
Probaste alimentar los servos con una fuente separada? Seguramente cuando lo conectas, hay un consumo que hace caer la tension de alimentacion y el pic se reinicia. Proba con una fuente aparte (compartiendo masas obvio).
Título: Re: Robot Hexapodo
Publicado por: willynovi en 31 de Diciembre de 2012, 11:29:26
Por ahora estoy alimentando todo desde el USB de la netbook porque tenia un solo servo para pruebas, fue algo improvisado solo para probar el código.
Cuando vuelva con las pruebas los alimento con una fuente independiente, obvio con masas compartidas  ;-)

Es lo que sospecho, que sea problema de ruido o alimentación que hace reiniciar al PIC, como los valores de los servos son fijos no logro diferenciar si el PIC se esta reiniciando.

Luego les adjunto el proyecto completo por si alguien le quiere meter mano  ;-)
Título: Re: Robot Hexapodo
Publicado por: Suky en 31 de Diciembre de 2012, 12:21:54
Si desconectas todos los servos (de esa manera no se genera ruido) funciona la comunicación? Porque puede ser falta de atención a la comunicación debido al corto periodo que existe entre interrupciones.

Usas polling o interrupt?

Saludos!
Título: Re: Robot Hexapodo
Publicado por: gera en 31 de Diciembre de 2012, 13:33:43
Creo que hay un registro del micro que te dice cual fue la causa del ultimo reset. Tendrias q consultarlo a ver si es por "brownout". En ese caso, es porque cayo la tension.

Si desconectas todos los servos (de esa manera no se genera ruido) funciona la comunicación? Porque puede ser falta de atención a la comunicación debido al corto periodo que existe entre interrupciones.

Usas polling o interrupt?

Saludos!

Suky, yo entendi que la comunicacion funciona, hasta que conecta el servo. Estoy casi seguro que es el consumo del motor lo que hace que se reinicie, pero mejor esperemos a que responda Willy.

Por cierto, como implementas polling en el micro?

Saludos!
Título: Re: Robot Hexapodo
Publicado por: willynovi en 31 de Diciembre de 2012, 14:06:03
Termino de hacer unas pruebas como para descartar la posible raiz del problemas, y creo que he llegado a una conclusión, que es por baja de la tensión al conectar el servo o por el ruido del motor del servo.

La prueba que hice fue cambiar el servo por un simple LED y no he tenido problemas de comunicación, conecto y desconecto el LED a todas las salidas y nunca pierdo la comunicación.

Suky, estoy usando "polling", probé con "interrupt" pero noté algunos problemillas, tampoco investigué mucho.

Gera, estoy trabajando con el framework de Microchip, el polling o interrupt lo selección con un #define, la verdad no investigué como está implementado.

Despues hago mas pruebas alimentando los servos con otra fuente.
Título: Re: Robot Hexapodo
Publicado por: MGLSOFT en 31 de Diciembre de 2012, 19:21:57
Yo tuve una placa en comunicación a la PC, transmitiendo a 115200 Bps y pasaba algo parecido a lo que dices.
Uso un FT232RL y en ese momento se alimentaba desde la placa, compartiendo el regulador y la masa, ademas de los pines TX y RX del micro.

Se soluciono reprogramandolo para que tome tensión del puerto USB y la placa sigue alimentándose desde su propia fuente, ahora solo comparte la masa y los pines de comunicación.
Llegue a transmitir a 460800 bps sin un solo mensaje erróneo, y sin usar las lineas de control de flujo.
Título: Re: Robot Hexapodo
Publicado por: willynovi en 31 de Diciembre de 2012, 19:32:12
No entendí mucho tu aplicación, si es USB a la PC o por puerto serie tradicional.

De todas formas creo que el problema está en la alimentación como decis vos, ademas que la idea no es alimentar todos los servos desde el USB de la PC, estoy limitado en corriente así que no es un problema tener que usar otra fuente ya que era algo que iba a hacer.

Ahora estoy en pleno desarrollo de la aplicación Host, así que por unos días no voy a estar probando mucho  :oops:
Título: Re: Robot Hexapodo
Publicado por: MGLSOFT en 01 de Enero de 2013, 21:35:27
Mi transmicion es serial >> Adaptador USB.
Para lo que te daba el ejemplo es para decirte que el USB no alimenta mas de 120 mA por el puerto, y que es muy afectado por los ruidos eléctricos y otros temas que lo perturban.
Título: Re: Robot Hexapodo
Publicado por: willynovi en 02 de Enero de 2013, 17:53:36
Mi transmicion es serial >> Adaptador USB.
Para lo que te daba el ejemplo es para decirte que el USB no alimenta mas de 120 mA por el puerto, y que es muy afectado por los ruidos eléctricos y otros temas que lo perturban.
Si eso sospecho, como te pasó a vos, lo mas probable es que tenga ruido que afecte y se reinicie el programa, mas que nada por la prueba que hice con el LED.
Por el tema de que se pase de corriente, creo que todavía no me ha pasado porque creo que la PC me hubiera avisado, al menos una vez me avisó cuando tuve un corto en otra placa y si mal no recuerdo se reinició la compu.

Cuando tenga el soft que envia datos seguro que lo voy a confirmar.

Hablando de eso, del soft que envia datos, no soy un programador muy experimentado, lo que mas he hecho es muy simple.
La pregunta concreta es, es necesario que al enviar una trama de datos, primer byte para un código y luego 20 bytes mas para la posición de cada servo, el dispositivo con el que me estoy comunicando retorne algún byte?
Entiendo que si tengo algún sensor, por ejemplo un switch, es necesario saber el estado, pero si no tuviera, es buena práctica usar un retorno desde el dispositivo? por ejemplo un código "estoy vivo" o "recibí los datos bien"
Título: Re: Robot Hexapodo
Publicado por: Darkman_A en 02 de Enero de 2013, 23:46:29
Mi transmicion es serial >> Adaptador USB.
Para lo que te daba el ejemplo es para decirte que el USB no alimenta mas de 120 mA por el puerto, y que es muy afectado por los ruidos eléctricos y otros temas que lo perturban.
Si eso sospecho, como te pasó a vos, lo mas probable es que tenga ruido que afecte y se reinicie el programa, mas que nada por la prueba que hice con el LED.
Por el tema de que se pase de corriente, creo que todavía no me ha pasado porque creo que la PC me hubiera avisado, al menos una vez me avisó cuando tuve un corto en otra placa y si mal no recuerdo se reinició la compu.

Cuando tenga el soft que envia datos seguro que lo voy a confirmar.

Hablando de eso, del soft que envia datos, no soy un programador muy experimentado, lo que mas he hecho es muy simple.
La pregunta concreta es, es necesario que al enviar una trama de datos, primer byte para un código y luego 20 bytes mas para la posición de cada servo, el dispositivo con el que me estoy comunicando retorne algún byte?
Entiendo que si tengo algún sensor, por ejemplo un switch, es necesario saber el estado, pero si no tuviera, es buena práctica usar un retorno desde el dispositivo? por ejemplo un código "estoy vivo" o "recibí los datos bien"

Hola willy.
A tu consulta de si  es buena práctica usar un retorno desde el dispositivo? por ejemplo un código "estoy vivo" o "recibí los datos bien" pienso que si, siempre y cuando la utilices. A veces se implementan y luego no se utilizan asi que es como si no existiera esta caracteristica. Una de las cosas que te puede devolver el dispositivo es un check sum de lo que ha recibido. Asi podrias verificar si los datos que le has enviado han llegado bien y en particular si "se han interpretado" bien. Imaginate que tenes inconveniente de ruido como supones te esta ocurriendo ahora. Cuando le envies datos al robot este haria cualquier cosa o no funcionaria. Con solo realizar la verificacion del check sum te darias cuenta. Por ejemplo, uno de los elementos que suelen dar problema son los cables USB.
Por otra parte tambien podrias tener algun codigo en la trama de datos que indique que estas haciendo una actualizacion de algun servo en particular (o de un grupo de servo) asi le podrias enviar los datos de los servos que cambian de posicion y no la de los 20 servos. Algo asi como

      -------------------------------------------------------------------------------------------------------------------
     | id inicio | id cambio parcial | servo5 | posicion | servo 7| posicion | servo11 | posicion | CRC | FIN |
     --------------------------------------------------------------------------------------------------------------------
id: identificador

Fijate si te cierra la idea.

Saludos.
Título: Re: Robot Hexapodo
Publicado por: willynovi en 03 de Enero de 2013, 00:22:18
Gracias por el aporte, y te comento que todavía estoy viendo como voy a enviar las posiciones de los servos.
Justo hoy estaba pensando en que quizás al enviar la posición de todos los servos en muchos casos voy a enviar datos de mas con lo que incremento la posibilidad de errores en la transmisión.
Entonces justamente pensaba eso que planteas vos, enviar solo la posición de los servos que han cambiado, y el resto dejarlos como están, ya que al no recibir datos de actualizar posición, mantendrían la posición actual.
Creo que algo de esto ya había planteado Gera.

Ademas es necesario tener en cuenta la inercia mecánica, de que sirve enviar datos si el robot no tiene posibilidad de procesarlos.

Lo del "check sum" lo he escuchado pero no he investigado mucho como implementarlo, aunque no creo sea difícil implementarlo  ;-)

Se que en muchos temas me adelanto, pero es como que tengo una forma de encarar las cosas un poco desordenada o como que voy avanzando distintos conceptos a la vez, así ya los voy madurando desde temprano  8)
Espero no desvirtuar el hilo Gera  :oops:
Título: Re: Robot Hexapodo
Publicado por: gera en 03 de Enero de 2013, 00:32:19
Yo creo que como tenemos un stream de datos, no es necesario implementar ningun control de flujo, ya que si un dato llega corrupto (o no llega), sera reemplazado por el proximo. Implementar un protocolo implica complicar la comunicacion y creo q estamos un poco jugados con los tiempos.
En todo caso se me ocurre que luego de cada dato recibido, el PIC puede responder con un "OK" para que la PC sepa si seguir enviando datos o no.
La trama que tengo en mente es algo asi:

 --------------------------------------------
| inicio | servo1 | servo2 | ... | servo 18 | fin |
 --------------------------------------------

De esta manera el parseo de la trama es mucho mas sencillo, ya que sabemos que cada byte corresponde a un servo. No tenemos que gastar tiempo de procesador interpretando la trama.

Willy, la idea es que todos participen y aporten ;)

Saludos!
Título: Re: Robot Hexapodo
Publicado por: willynovi en 03 de Enero de 2013, 15:29:49
Gera, como te fué con la compra de los servos?
Y el módulo bluetooth, lo compras en DX?

Estoy viendo de hacer una inversión en servos  :mrgreen: y ahí en Hobby King tienen muy buen precio, el tema es saber de alguna experiencia previa, por el plazo de entrega no me preocupo, pero si por el tema del pago y como me lo despachan.

Si no te molesta comentar, te lo voy a agradecer  ;-)
Título: Re: Robot Hexapodo
Publicado por: gera en 04 de Enero de 2013, 09:10:11
Gera, como te fué con la compra de los servos?
Y el módulo bluetooth, lo compras en DX?

Estoy viendo de hacer una inversión en servos  :mrgreen: y ahí en Hobby King tienen muy buen precio, el tema es saber de alguna experiencia previa, por el plazo de entrega no me preocupo, pero si por el tema del pago y como me lo despachan.

Si no te molesta comentar, te lo voy a agradecer  ;-)

Willy, los servos todavia no me llegan, seguro se atraso el envio por las fiestas. Pero te cuento que ya he usado microservos de HK para aeromodelismo (helicopteros), y uno que otro se rompio. Pero no creo que el robotito les exija tanto como los helis, ademas por menos de 2 dolares no podemos esperar mucho jeje. Tambien en hobbyking venden unos mas caritos q son de mejor calidad, incluso hay unos metalicos. Fijate en las reviews ;-)
El modulo bluetooth lo compre a DX, ahi lo tengo, todavia no hago pruebas. Pero por lo que lei en las reviews, funciona a la perfeccion. Es arduino compatible, asiq asumo que trabaja con niveles TTL (5V). Los envios de china suelen demorar alrededor de un mes.

Despues contame que compraste y como te fue ;-)
Saludos!
Título: Re: Robot Hexapodo
Publicado por: willynovi en 04 de Enero de 2013, 10:00:04
Gracias por tus comentarios Gera.
Por la calidad de los servos o del módulo no me preocupo tanto, mas que nada me preocupa el tema del pago y el envio, por un tema de desconocimiento.

Ambos, HK y DX son pago con tarjeta de crédito, no?

Voy a ver si me registro en ambas páginas y me animo a realizar la compra, por ahora quizas con micro servos de poco valor para probar el sistema de compra y luego veo si encaro algunos servos mas grandes ya que mi idea es hacer un robot que pueda llevar la netbook a hombros.
Título: Re: Robot Hexapodo
Publicado por: Darkman_A en 04 de Enero de 2013, 11:04:51
Gracias por tus comentarios Gera.
Por la calidad de los servos o del módulo no me preocupo tanto, mas que nada me preocupa el tema del pago y el envio, por un tema de desconocimiento.

Ambos, HK y DX son pago con tarjeta de crédito, no?

Voy a ver si me registro en ambas páginas y me animo a realizar la compra, por ahora quizas con micro servos de poco valor para probar el sistema de compra y luego veo si encaro algunos servos mas grandes ya que mi idea es hacer un robot que pueda llevar la netbook a hombros.

Hola Willy.
Dado que tu idea es hacer un robot (supongo que un hexapodo) que lleve una netbook, te paso un link que encontre donde trata el tema de las fuerzas que actuan en las patas del hexapodo. Se que en este momento no estan evaluando esto, pero es como para no perder este link y que quede registrado aca.
http://www.robotshop.com/robot-leg-tutorial.html
En particular creo que, si tiene que llevar tal peso, optaria por ruedas. Creo que los motores te saldrian mas economicos que la cantidad de servos a utilizar. Algo asi como lo que hizo felix (http://sergiols.blogspot.com.ar/search?updated-min=2011-01-01T00:00:00-03:00&updated-max=2012-01-01T00:00:00-03:00&max-results=11) en su momento.
Pero bueno, ya dialogaremos sobre eso en su momento.
Saludos.
Título: Re: Robot Hexapodo
Publicado por: gera en 04 de Enero de 2013, 11:11:19
Yo he comprado bastante a HK y DX, y nunca tuve problemas. Lo peor que puede pasar, es que te retengan el paquete en la aduana. En ese caso, te llega una carta a tu casa citandote al correo, vas y pagas el 50% del valor declarado para poder retirarlo. HK te da la posibilidad de sub-facturar (te mandan una factura con un monto menor), y DX te da la posibilidad de q envien el paquete como regalo (sin factura).
Podes pagar con tarjeta o con paypal. Estas son empresas serias y aseguran bien tus datos y los de tu tarjeta.
Y para dejarte mas tranquilo, tengo un amigo q una vez le robaron unas cosas en la aduana, se puso en contacto con DX y se lo enviaron de nuevo gratis.

EDIT:
Excelente aporte Darkman!!! :)
Título: Re: Robot Hexapodo
Publicado por: willynovi en 04 de Enero de 2013, 11:50:35
Gracias Darkman  ((:-))
Tambien suelo colgar enlaces para dejarlos como referencia, es buena práctica forera  ;-)

Como decia, me voy a animar por ahora con unos micro servos, los HTX900 porque ya tengo 4 de esos y para completar los 18 por ahora me sirven en esta etapa de investigación.
Lo mismo que con el módulo bluetooth.

La idea de hacer un robot con patas es para tener menos limitaciones en la traslación en terrenos heterogeneos, quizas un robot con ruedas en ese caso si tiene limitaciones mas allá que su capacidad de carga sea mucho mayor.

EDIT: ya me animé a 14 de estos servos (http://www.hobbyking.com/hobbyking/store/__662__HXT900_9g_1_6kg_12sec_Micro_Servo.html)  :-)
Título: Re: Robot Hexapodo
Publicado por: willynovi en 05 de Enero de 2013, 13:14:34
Novedades novedosas de sábado por la mañana  :mrgreen:

Hice la prueba con una fuente externa y ha resultado de maravillas, el programa no se cuelga en ningún momento, le agregué que retorne un caracter para indicarme que la comunicación se realizó bien, que en realidad el caracter es el eco de la posición del servo.

Por ahora estoy probando con un solo servo, luego escribo las lineas para enviar hasta 20 servos y les cuento como anda.

Lo que tengo que ajustar son los tiempos, o sea, los tiempos de manejo de servos, el de 0,5ms y el de 2,5ms.
El recorrido del servo es mayor a 180° y creo que ahí es donde tengo algún drama. Con un valor menor a 20° el servo ya esta en 0°. Así que tengo que hacer algunas pruebas para corregir eso.

No tengo osciloscopio, seria util para confirmar los tiempos de los pulsos a los servos sean correctos.
Se que se puede hacer algo con la entrada de microfono y un osciloscopio virtual, alguíen puede recomendarme uno que haya probado?

Les adjunto una captura del programita que diseñé, ven que pueda agregar algo?

(http://s2.postimage.org/x54hap539/HID_Servo_Driver_01.jpg) (http://postimage.org/image/x54hap539/)

Saludos,
Título: Re: Robot Hexapodo
Publicado por: Darkman_A en 05 de Enero de 2013, 13:40:41
Willy, Gera, gracias por el 'OK' a mi post anterior. No quiero embarrarles el hilo del post y no sabia si ponerlo o no. Espero que en algun momento esa informacion les sea util.
Willy me alegro por tus adelantos y esta buena la interfase de tu programa. ¿En que lenguaje o entorno estas programando ?.

Saludos.
Título: Re: Robot Hexapodo
Publicado por: willynovi en 05 de Enero de 2013, 14:39:22
Espero que en algun momento esa informacion les sea util.

Claro que es útil  ;-)
Le di una leída por arriba, no profundicé mucho, pero se ve que la base es buena.
Luego me quedé mirando la web esa y vi que hay unos módulos para manejo de servos, el que mas me llamó la atención fue este:
Adafruit 16-Channel I2C Servo Controller (http://www.robotshop.com/adafruit-16-channel-i2c-servo-controller.html), que por el valor, el tamaño y la comunicación creo es una buena opción si se quiere hacer un robot totalmente autonomo manejado solo con un microcontrolador.

¿En que lenguaje o entorno estas programando ?
He pasado por varios, hace mucho hice mis primeros pinos con el Basic y despues ya me incliné por el C.
Actualmente estoy con Visual C y usando el demo que provee microchip le fui quitando/agregando cosas.
Hace poco hice un programita para otra aplicación (http://www.xtremeracers.info/forums/viewtopic.php?f=45&t=9993) y programado con la WinAPI, pero ahora con el entorno visual voy mucho mas rápido.
Título: Re: Robot Hexapodo
Publicado por: willynovi en 05 de Enero de 2013, 21:14:31
Sigo sin ajustar el tiempo de los 0,5mseg para que coincida el 0 del programa con el 0 del servo, pero.....

Completé el programa para que atendiera a todos los servos e hice un video con muy mala calidad  :oops:

En el video intento mostrar el moviemiento del servo, como decia por ahora uno solo, entonces lo que hago es cambiar de pin entre el primero y el último para ver que estan llegando todos los datos. Como estoy limitado con las salidas, el último es el 18.

Título: Re: Robot Hexapodo
Publicado por: gera en 07 de Enero de 2013, 09:05:54
Esaaa!! Felicitaciones por los avances! ;)
Yo ya tengo las plaquitas hechas, esperando a ser perforadas y soldadas. Solo tengo que encontrar el tiempo para hacerlo jeje.
Respecto a tu problema, lo ideal sería tener un osciloscopio para ver el periodo del pulso. Pero como no contas con uno, se me ocurre que podes hacer debugging del programa para ver cuantos ciclos esta el pulso en alto y asi calcular el tiempo.
Suerte con eso!
Título: Re: Robot Hexapodo
Publicado por: willynovi en 07 de Enero de 2013, 12:38:46
Gracias por las felicitaciones Gera  ;-)

Me ha llegado un mail de HK que en 45 días tendré los servos en casa, así que por ahora voy a ir armando una sola pata con los servos que ya tengo, así para cuando me lleguen tengo todo cocinado.

Estoy averiguando el tema de la cinematica inversa a ver como es esto y como seria para programarlo.
Por ahora todo el cálculo del movimiento lo voy a hacer en la PC y enviar solo al pic la actualización de la posición de cada servo.

Por el tema de la placa voy a ver si hago un deseño nuevo así puedo conectar los servos directamente con su alimentación. Por ahora sigo con el 18f2550 que puedo controlar 18 servos.

Título: Re: Robot Hexapodo
Publicado por: gera en 07 de Enero de 2013, 13:14:11
Gracias por las felicitaciones Gera  ;-)

Me ha llegado un mail de HK que en 45 días tendré los servos en casa, así que por ahora voy a ir armando una sola pata con los servos que ya tengo, así para cuando me lleguen tengo todo cocinado.

Que bien! a mi no me han enviado nada.. desde el año pasado que estoy esperando esos servos!

Citar
Estoy averiguando el tema de la cinematica inversa a ver como es esto y como seria para programarlo.
Por ahora todo el cálculo del movimiento lo voy a hacer en la PC y enviar solo al pic la actualización de la posición de cada servo.

Mira este proyecto: http://www.pablogindel.com/trabajos/samsa-ii-2010/
Al final de la pagina hay un link que dice "SAMSA II sources". Ahi tenes codigo fuente que yo estoy usando como ejemplo. Me gusta porque tiene una estructura modular, con funciones de bajo nivel que controlan el movimiento de las patas, y funciones de mas alto nivel que controlan los estilos de caminata, etc... Es justamente lo que pienso implementar.
Título: Re: Robot Hexapodo
Publicado por: gera en 08 de Enero de 2013, 12:15:41
Bueno, ya tengo la placa hecha (esta tarde subo fotos) y mi compañero esta trabajando en la interface para la PC.
El proximo paso es mover los servos individualmente (cosa que ya has logrado Willy), y luego veremos de aplicar IK para mover las patas individualmente.
Sin embargo, me surge una duda: Como sincronizar el movimiento de las patas? O sea, para generar una caminata debemos mover las patas sincronizadamente. Cada pata describe un movimiento que esta desfasado respecto al de las demas (esa fase depende de cuantas patas movamos a la vez). Como se les ocurre que podemos implementar esto?
Esto es lo que tengo en mente por ahora:
Un contador sirve como referencia de sincronismo, un "clock universal" para las patas. Cada pata recibe como parametro el movimiento que tiene q describir (mediante una funcion matematica, probablemente curvas bezier) y una fase. Entonces la posicion de cada pata en un instante dado se calcula como la funcion correspondiente al valor del contador mas el desfasaje.

Que opinan? Se les ocurre otra manera? Espero sus respuestas!
Título: Re: Robot Hexapodo
Publicado por: willynovi en 08 de Enero de 2013, 12:58:09
Sin embargo, me surge una duda: Como sincronizar el movimiento de las patas? O sea, para generar una caminata debemos mover las patas sincronizadamente. Cada pata describe un movimiento que esta desfasado respecto al de las demas (esa fase depende de cuantas patas movamos a la vez). Como se les ocurre que podemos implementar esto?

Estuve viendo que para mantener el robot estable, sin contar con sensores, es necesario tener al menos 3 patas en el suelo.
Se puede hacer entonces tres tipos de movimientos de patas dependiendo de la velocidad/suabidad del movimiento.

Mover de a una sola patas, menor velocidad -> mas suabidad y armonioso el movimiento
Mover de a dos patas
Mover de a tres patas, mayor velocidad -> menos suabe el moviemiento

La cinemática inversa ya la tengo en papel, luego la reviso y la adjunto, aunque no es muy dificil.

Lo que estoy pensando es que controlemos la posición del centro de gravedad del robot y luego el programa resuelve solo la posición o movimiento de cada pata.

Un contador sirve como referencia de sincronismo, un "clock universal" para las patas. Cada pata recibe como parametro el movimiento que tiene q describir (mediante una funcion matematica, probablemente curvas bezier) y una fase. Entonces la posicion de cada pata en un instante dado se calcula como la funcion correspondiente al valor del contador mas el desfasaje.

Si, yo creo que es la forma, se necesita la variable tiempo, tambien si fuera necesario implementar un PID.
Título: Re: Robot Hexapodo
Publicado por: willynovi en 10 de Enero de 2013, 20:58:31
Cada pata recibe como parametro el movimiento que tiene q describir (mediante una funcion matematica, probablemente curvas bezier)

Como no estaba al tanto de las curvas Bezier, es decir, las conozco si, pero no como se generaban  :oops: , me puse un poco a ver como es el tema y encontré un código que puede resultar, al menos yo voy a empezar con eso como para introducir algún movimiento.

Código: [Seleccionar]
/*Código para generar una curva cúbica de Bézier*/
 
typedef struct
{
    float x;
    float y;
}
Point2D;
 
/*
cp es una matriz de 4 elementos donde:
cp[0] es el primer punto, o P0 en el diagrama de abajo
cp[1] es el primer punto de control, o P1 en el diagrama de abajo
cp[2] es el segundo punto de control, o P2 en el diagrama de abajo
cp[3] es el punto final, o P3 en el diagrama de abajo
t es el valor del parámetro, 0 <= t <= 1
*/
 
Point2D PointOnCubicBezier( Point2D* cp, float t )
{
    float   ax, bx, cx;
    float   ay, by, cy;
    float   tSquared, tCubed;
    Point2D result;
 
    /* cálculo de los coeficientes polinomiales */
 
    cx = 3.0 * (cp[1].x - cp[0].x);
    bx = 3.0 * (cp[2].x - cp[1].x) - cx;
    ax = cp[3].x - cp[0].x - cx - bx;
 
    cy = 3.0 * (cp[1].y - cp[0].y);
    by = 3.0 * (cp[2].y - cp[1].y) - cy;
    ay = cp[3].y - cp[0].y - cy - by;
 
    /* cálculo del punto de la curva en el valor del parámetro t */
 
    tSquared = t * t;
    tCubed = tSquared * t;
 
    result.x = (ax * tCubed) + (bx * tSquared) + (cx * t) + cp[0].x;
    result.y = (ay * tCubed) + (by * tSquared) + (cy * t) + cp[0].y;
 
    return result;
}
 
/*
 ComputeBezier llena un array de Point2D con los puntos de la curva
 generados de los puntos de control cp.
 Esta llamada debe ubicar suficiente lugar de memoria para el resultado
 la cual es del tamaño <sizeof(Point2D) numberOfPoints>
*/
 
void ComputeBezier( Point2D* cp, int numberOfPoints, Point2D* curve ) {
    float   dt;
    int   i;
 
    dt = 1.0 / ( numberOfPoints - 1 );
 
    for( i = 0; i < numberOfPoints; i++)
        curve[i] = PointOnCubicBezier( cp, i*dt );
}

(http://upload.wikimedia.org/wikipedia/commons/6/68/Bezier_cubic.png) (http://upload.wikimedia.org/wikipedia/commons/a/a3/Bezier_cubic_anim.gif)

Entonces lo que tendríamos que hacer es definir el punto de la nueva posición del pié y los dos puntos de control para generar la curva de Bezier.
Los puntos de control por el momento pienso que sean la simple elevación de posición actual y posición nueva. Mas adelante veo si se puede ajustar para lograr algún otro tipo de movimiento. De todas formas los puntos de control tienen que ser calculados a partir de alguna simple ecuación de los puntos actual y nuevo.

Este "algoritmo" es simple, quizás no es el mas rápido o que consuma menos memoria, pero es un inicio. Aunque tengo que probar como funciona  :mrgreen:

Fuente: Curva de Bézier - Wikipedia (http://es.wikipedia.org/wiki/Curva_de_B%C3%A9zier)
Título: Re: Robot Hexapodo
Publicado por: gera en 10 de Enero de 2013, 22:33:55
Te paso una funcion mas simple

Código: C
  1. float bezier (float p0, float p1, float p2, float t) {
  2.   return sq(1-t)*p0 + 2*t*(1-t)*p1 + sq(t)*p2;
  3. }

Las variables p0, p1 y p2 representan las componente sobre el eje "y" de cada punto. La componente sobre el eje "x" son 0, 0.5 y 1 respectivamente. Entonces la funcion:
Código: [Seleccionar]
bezier(0, 2, 0,t);Corresponde a una curva bezier cuadratica compuesta por los puntos (0,0)  (0.5,2) (1,0)

Yo creo que con eso es suficiente para generar los pasos del robot, ya que te permite levantar la pata cuanto quieras, y si queres hacer un paso mas largo (o corto), basta con tomar intervalos mas largos entre punto y punto.
Espero que te sirva, saludos!!
Título: Re: Robot Hexapodo
Publicado por: willynovi en 10 de Enero de 2013, 23:09:42
Claro, yo habia pensado de entrada en usar una cuadrática, no tiene mucho sentido una cúbica, pero fue un código que lo vi lindo  ;-)

La función que presentas vos es la básica y aplicada a un paso unitario, así entiendo  :?

Habría que, según la suavidad del movimiento, iterar según cuantos puntos intermedios y calcular cada vez, por cada punto intermedio, la función Bezier con la entrada t.

Voy a intentar adaptar la que tengo a una cuadrática y tambien probar la que pusiste, luego sacaré conclusiones.

Lo que estoy notando es que me siento un poco oxidado con los razonamientos matemáticos  :oops:
Título: Re: Robot Hexapodo
Publicado por: gera en 11 de Enero de 2013, 13:06:40
Willy, yo creo que va a ser mejor usar una tabla, asi no desperdiciamos tiempo haciendo siempre los mismos calculos. Y si queremos variar la altura o longitud del paso, multiplicamos por un escalar y listo.

Bueno, ya tengo algo de codigo hecho. Funciona asi:
Recibe 20 caracteres por el puerto serie, los almacena en el array servo_duty[], y utiliza esos valores para calcular el duty de las 20 señales PWM.
Como ven en el archivo hexapodo.h, hay un array con los pines de cada uno de los servos. Entonces si hago:
Código: [Seleccionar]
output_high(servo_pin[3]);

estoy poniendo el alto el pin del cuarto servo (porque comienza de 0).
Para generar las 20 señales PWM, pongo todos los pines en alto, luego incremento un contador cada 50us con el timer1, y cuando ese contador se iguala al duty del servo, lo pongo en bajo. Cuando el contador llega a 400 (20ms), vuelve a empezar.
Esto me da una resolucion de (2ms-1ms)/50us=20 posibles valores. Los servos q compre pueden recorrer 60º. Entonces la resolucion es 60º/20=3º. Creo que es aceptable no? Aunque puede mejorarse, ya que hay 18ms que estamos desperdiciando, puesto que siempre estaran en nivel bajo.

Bueno, espero sus sugerencias y opiniones  :)

Hexapodo.c
Código: C
  1. #include <18F4550.h>
  2.  
  3. #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,PLL5,CPUDIV1,NOMCLR
  4. #use delay(clock=48000000)
  5. #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
  6.  
  7. #include "hexapodo.h"
  8.  
  9. int8 servo_duty[20]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
  10. int16 counter=0;
  11.  
  12. #INT_TIMER1
  13. void timer1_isr(){
  14.    int i=0;
  15.    
  16.    for(i=0;i<20;i++){
  17.       if(counter==(int16)servo_duty[i])
  18.          output_low(servo_pin[i]);
  19.    }
  20.    
  21.    if(++counter>=400)    //400*50us = 20ms (wave periodo required for drive a servo)
  22.       counter=0;
  23.  
  24.    set_timer1(PRELOAD_TMR1);
  25. }
  26.  
  27.  
  28. #INT_RDA
  29. void serial_isr(){
  30.    char data;
  31.    int i=0;
  32.    
  33.    if(kbhit()){
  34.       while(data=getc() != '\r' && i<20){
  35.          servo_duty[i]=data;
  36.          i++;
  37.       }
  38.    }
  39. }
  40.  
  41.  
  42. void init(){
  43.    // Digital IO
  44.    set_tris_a(0b110011);   //V_SENS,NC,LED_G,LED_R,NC,NC
  45.    set_tris_b(0b11110000); //PGD,PGC,NC,NC,S,S,S,S
  46.    set_tris_c(0b10001000); //RX,TX,S,S,VUSB,S,S,S
  47.    set_tris_d(0b00000000); //S,S,S,S,S,S,S,S
  48.    set_tris_e(0b000);      //S,S,S
  49.    
  50.    // Timer1
  51.    setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_1 );
  52.    set_timer1(PRELOAD_TMR1);
  53.    
  54.    // Interrupts
  55.    enable_interrupts(INT_TIMER1);
  56.    enable_interrupts(INT_RDA);
  57.    enable_interrupts(GLOBAL);
  58. }
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65. void main(){
  66.    delay_ms(10);
  67.    init();
  68.    
  69.    while(TRUE){
  70.       output_low(LED_R);
  71.       delay_ms(250);
  72.       output_high(LED_R);
  73.       delay_ms(250);
  74.    }
  75. }

Hexapodo.h
Código: C
  1. #ifndef _HEXAPODO_H_
  2. #define _HEXAPODO_H_ 1
  3.  
  4.  
  5. #define LED_R PIN_A3
  6. #define LED_G PIN_A2
  7.  
  8. #define SERVO1 PIN_B3
  9. #define SERVO2 PIN_B2
  10. #define SERVO3 PIN_B1
  11. #define SERVO4 PIN_B0
  12. #define SERVO5 PIN_D7
  13. #define SERVO6 PIN_D6
  14. #define SERVO7 PIN_D5
  15. #define SERVO8 PIN_D4
  16. #define SERVO9 PIN_C5
  17. #define SERVO10 PIN_C4
  18. #define SERVO11 PIN_D3
  19. #define SERVO12 PIN_D2
  20. #define SERVO13 PIN_D1
  21. #define SERVO14 PIN_D0
  22. #define SERVO15 PIN_C2
  23. #define SERVO16 PIN_C1
  24. #define SERVO17 PIN_C0
  25. #define SERVO18 PIN_E2
  26. #define SERVO19 PIN_E1
  27. #define SERVO20 PIN_E0
  28.  
  29.  
  30.  
  31. #define PRELOAD_TMR1 64943
  32.  
  33.  
  34. int16 servo_pin[] = {SERVO1,SERVO2,SERVO3,SERVO4,SERVO5,SERVO6,SERVO7,SERVO8,SERVO9,SERVO10,SERVO11,SERVO12,SERVO13,SERVO14,SERVO15,SERVO16,SERVO17,SERVO18,SERVO19,SERVO20};
  35.  
  36. void init();
  37.  
  38. #endif
Título: Re: Robot Hexapodo
Publicado por: willynovi en 11 de Enero de 2013, 15:53:49
Gera, entiendo lo de la matriz, incluso el código que proponia tambien llena una matriz que puede hacerse tambien unitario y luego al momento de aplicarlo lo multiplicamos por un coeficiente. Aunque tu solución lo que calcula es la altura y los puntos actual y nuevo tienen que tener la misma altura.

De todas formas, por el momento son cálculos y especulaciones en el aire, voy a ver si estos días puedo fabricarme una pata y llegar a mover los servos en alguna dirección  ;-)

Con respecto a tu programa, creo que puedes mejorar incluso un poquito el tiempo de interrupción, yo lo probé con 40us y no me dió problemas, no probé con menos todavia.

Creo que tienes un error en los cálculos de la resolución, porque el pulso alto del servo es 2ms, entonces -> 2ms/50us=40, por lo que si tienes servos de 60° te da una resolución de 1,5°. Mucho mas aceptable de lo que pensabas  :mrgreen:
Creo que ese valor 20 que calculas lo usas en el programa, quizas debas cambiarlo.
Lo que no veo son los 0,5ms iniciales, o eso ya lo tienes incorporado en el valor del duty de cada servo?

El otro punto que le veo a diferencia de mi programa es que tu siempre mantienes el tiempo de la interrupción en 50us incluso posterior a que terminó el pulso de 2,5ms. Es decir, de 2,5ms hasta 20ms tienes 17,5ms que no es necesario tener interrupciones por el timer.
Lo que yo hago es modificar el valor del timer para que desborde a 17,5ms y así cae la interrupción cuando deben ponerse nuevamente los pines de los servos en alto.
Similar con el 0,5ms iniciales donde no es necesario modificar el estado de los pines.

De todas formas, si así te funciona bien pues no toques nada.

Siempre me ha quedado la duda de que si tener interrupciones afecta en algo al funcionamiento del microcontrolador, mientras que no afecte al programa obvio, me refiero solo al microcontrolador sin tener en cuenta el desarrollo del programa.

Veo que tu comunicacion la atiendes por interrupción, lo has probado ya? tener la interrupcion cada 50us afecta en algo?
Título: Re: Robot Hexapodo
Publicado por: Miquel_S en 11 de Enero de 2013, 16:18:38
¡ Y queriais que yo aportara algo ! Ya ni se donde me perdi.  :oops:
El que sabe sabe y el que no ...........

Saludos!

Título: Re: Robot Hexapodo
Publicado por: gera en 11 de Enero de 2013, 16:51:39
Creo que tienes un error en los cálculos de la resolución, porque el pulso alto del servo es 2ms, entonces -> 2ms/50us=40, por lo que si tienes servos de 60° te da una resolución de 1,5°. Mucho mas aceptable de lo que pensabas  :mrgreen:
Creo que ese valor 20 que calculas lo usas en el programa, quizas debas cambiarlo.
Si no me equivoco, es 1ms, porque el pulso minimo es de 1ms y el maximo de 2ms, o sea que la informacion util se encuentra en ese intervalo de 1ms.

Citar
Lo que no veo son los 0,5ms iniciales, o eso ya lo tienes incorporado en el valor del duty de cada servo?
Tenes razon! Inicializo todos los servos en 0, cuando debería ser 30 (30 interrupciones por 50us cada una = 1.5ms)

Citar
El otro punto que le veo a diferencia de mi programa es que tu siempre mantienes el tiempo de la interrupción en 50us incluso posterior a que terminó el pulso de 2,5ms. Es decir, de 2,5ms hasta 20ms tienes 17,5ms que no es necesario tener interrupciones por el timer.
Lo que yo hago es modificar el valor del timer para que desborde a 17,5ms y así cae la interrupción cuando deben ponerse nuevamente los pines de los servos en alto.
Similar con el 0,5ms iniciales donde no es necesario modificar el estado de los pines.
Es una buena idea, asi el timer no esta interrumpiendo a lo tonto ;) Es mas, tambien hay 1ms inicial que siempre se mantiene en alto. O sea que podemos hacer lo siguiente:
-Poner todos los pines en alto
-Configurar el timer para q interrumpa dentro de 1ms.
-Luego que interrumpa cada 10us unas 100 veces, y alli modulamos nuestra señal (total 1ms)
-Por ultimo que vuelva a interrumpir a los 18ms (mas los 2ms anteriores tenemos 20ms)

Citar
Veo que tu comunicacion la atiendes por interrupción, lo has probado ya? tener la interrupcion cada 50us afecta en algo?

Todavia no lo pruebo, cuando escribi estas lineas no tenia la placa a mano. En caso de haber problemas, podria implementar un buffer para recibir los datos por el puerto serie, y luego vaciarlo en el bucle principal del programa. O bien, levantar un flag cuando caiga la interrupcion del timer, y cambiar el estado de los pines en el bucle principal.
Ya voy a hacer pruebas y vemos que sale ;)
Saludos!!
Título: Re: Robot Hexapodo
Publicado por: willynovi en 11 de Enero de 2013, 18:14:11
Creo que todos los servos, al menos los analógicos, trabajan con un pulso de ancho mínimo 0,5ms y máximo 2,5ms y la frecuencia de período 20ms.

Aunque puede variar muy poco según el fabricante en mi caso.
Los que tengo yo según el fabricante Hextronic el pulso debe ser entre 0,45ms y 2,45ms.

Supongo que la mejor forma es ensayarlos y ver como reaccionan.

Con esto en mente lo que hice fue poner los tiempos como #define y así resulta mas facil ajustar el programa.
Título: Re: Robot Hexapodo
Publicado por: willynovi en 12 de Enero de 2013, 13:13:42
Averigue un poco, de todas formas no he llegado a conclusiones finales  :(
Aparentemente los servos, al menos la mayoria, trabajan con un pulso centrado en 1,5ms y el periodo de 20ms.

Ahora estoy teniendo otro problema y recurro a la ayuda de todos aquellos que programen en Visual C, y particularmente con Forms.

Resulta que estoy tratando de incorporar un reloj al programa, de hecho lo hice, la idea es tener una base de tiempo para realizar los movimientos sincronizados.

Pero no logro incorporar la clase Stopwatch desde el diseñador gráfico.
Lo hago manualmente, compilo el programa, y funciona correctamente.

El problema es cuando vuelvo al diseñador y luego al código resulta que lo que agregué manualmente me lo ha borrado.
Título: Re: Robot Hexapodo
Publicado por: gera en 12 de Enero de 2013, 20:26:48
Willy, hasta donde se, la gran mayoria de los servos admiten un duty de 1ms como minimo, 2ms como maximo, 1.5 como medio, y un periodo total de 20ms. Pero varia entre marca y marca.

Respecto al reloj, no podes usar el reloj del sistema y calcular un modulo para ir tomando intervalos?
Yo se que buscas hacerlo con un objeto, pero tal vez esto te sirva:
http://msdn.microsoft.com/en-us/library/system.timers.timer.interval.aspx
http://stackoverflow.com/questions/2150291/how-do-i-measure-a-time-interval-in-c

Saludos!!
Título: Re: Robot Hexapodo
Publicado por: willynovi en 12 de Enero de 2013, 21:53:03
Gera, gracias por los link, no habia dado con ellos porque habia encontrado lo del Stopwatch y me quede renegando con ese jejejeej

Con el Stopwatch logro una resolución de 1ms, pero parece que con los ejemplos que me diste se puede lograr una resolución del orden de 1us.

El tema de no usar un objeto no es tan grave, mientras que cumpla el objetivo  :mrgreen:
Título: Re: Robot Hexapodo
Publicado por: willynovi en 15 de Enero de 2013, 15:54:56
Estuve avanzando un poco, pero muy poco  :D

El tema del tiempo digamos que funciona, he puesto un contador y pareciera que se tarda en volver entre 5ms y 15ms, aunque no se bien si es un error como he leido por ahí o porque mi programa se toma esos tiempos.
Hoy estoy usando las funciones QueryPerformanceFrequency() y QueryPerformanceCounter() en C en el soft host de la PC, de un enlace que pasó Gera.
La idea que tengo es combinar ese valor con Stopwatch y comparar los valores.

Tambien tenia idea de que sea el PIC el que marque el sincronismo enviando el dato por el USB, pero me estoy adelantando, cuando tenga algo en movimiento veremos como implementar esto.

Estoy con la parte trigonométrica por ahora, en base a tener el punto actual y el destino calculo el intermedio para poder armar la curva bezier cuadratica y de ahí obtener los puntos para armar la cinematica inversa.

Pero me adelanto un poco, como estoy pensando que el hexapod tenga algún tipo de autonomia, que micro puede ser el adecuado para utilizarlo como cerebro del robot?

Supongo que los puntos fuertes son velocidad de proceso y capacidad para realizar operaciones matemáticas.

Algún PIC32 podría ir? Cual me recomiendan?
O quizas estoy exagerando y alguno de la linea 18F me alcanza?

La idea es ir viendo como armarme de algo, alguien tiene experiencia en algo similar?
Título: Re: Robot Hexapodo
Publicado por: AKENAFAB en 15 de Enero de 2013, 19:38:06
Hola!

Hace tiempo realice una aplicacion en visual basic y tambien requeria de cierto periodo para comunicar.
Lo deje porque no era preciso.
Todo lo de los tiempos lo controle con el uC.

A mi parecer te podría servir un pic18F(medianamente complejo) o un 24H/E  (16MIPS/40MIPS) que es más veloz y podrás procesar a 16bits.

Excelentes avances!!

Saludos!

http://ww1.microchip.com/downloads/en/devicedoc/39754h.pdf
Título: Re: Robot Hexapodo
Publicado por: MGLSOFT en 15 de Enero de 2013, 21:19:07
Willy, estas queriendo controlar los servos directamente con temporizaciones desde el programa en PC ???
Es bastante dificil lograrlo, ya que las tareas en multitareas siempre tendran mayor prioridad de procesador que cualquier programa del usuario, por lo tanto veo bastante dificil que puedas lograr tiempos con precision del milisegundo...
Título: Re: Robot Hexapodo
Publicado por: gera en 16 de Enero de 2013, 00:32:14
Willy, estas queriendo controlar los servos directamente con temporizaciones desde el programa en PC ???
Es bastante dificil lograrlo, ya que las tareas en multitareas siempre tendran mayor prioridad de procesador que cualquier programa del usuario, por lo tanto veo bastante dificil que puedas lograr tiempos con precision del milisegundo...

Perdon que me meta, pero en realidad el micro controla los servos. La PC le envia instrucciones al micro para actualizar las posiciones, y eso es lo que Willy quiere controlar (la frecuencia con la q la PC envia esas instrucciones).
Saludos!
Título: Re: Robot Hexapodo
Publicado por: AKENAFAB en 16 de Enero de 2013, 00:46:48
Yo había entendido que el pc xD  :D

No necesitan una tasa de envío rápida porque los servos toman su tiempo en llegar a la posición deseada.

Para tener una idea de la velocidad viene un valor de tiempo en recorrer X angulo.Podrían probar con ese tiempo para establecer velocidad de transferencia..

Saludos!
Título: Re: Robot Hexapodo
Publicado por: willynovi en 16 de Enero de 2013, 07:13:14
Tener la variable tiempo en el soft host es para poder determinar, en base a una velocidad de desplazamiento del robot previamente establecida, las sucesivas posiciones de cada servo.

Gracias por las respuestas, voy a ver si empiezo a leer eso del 24F, solo para tener una idea  ;-)
Título: Re: Robot Hexapodo
Publicado por: gera en 16 de Enero de 2013, 09:27:52
Yo había entendido que el pc xD  :D

No necesitan una tasa de envío rápida porque los servos toman su tiempo en llegar a la posición deseada.

Para tener una idea de la velocidad viene un valor de tiempo en recorrer X angulo.Podrían probar con ese tiempo para establecer velocidad de transferencia..

Saludos!

Claro, ademas no queremos saturar al micro enviandole datos por el puerto serie ;)

Les cuento que se me quemo la placa donde tenia el pic ¬¬ es la segunda vez q me pasa con los pics en formato TQFP.. Seguramente algun corto entre las patitas. Asique bueno, a hacer otra placa y tener mas cuidado con la distancia entre pistas.. Tambien voy a conseguir algun flux para q no quede estaño entre patita y patita.
Saludos!!
Título: Re: Robot Hexapodo
Publicado por: willynovi en 16 de Enero de 2013, 12:58:59
Huuuu, que garrón che, y podes recuperar el PIC?

Estos temas son los que me desalientan a hacer algo con montaje superficial  :oops:
Título: Re: Robot Hexapodo
Publicado por: gera en 16 de Enero de 2013, 13:16:18
Huuuu, que garrón che, y podes recuperar el PIC?

Estos temas son los que me desalientan a hacer algo con montaje superficial  :oops:

Lo dudo, hasta tiro humito jaja. Pero tengo un par mas. El garron es todo el trabajo de hacer otra placa, soldar, etc..
En fin, dentro de poco voy a estar en carrera de nuevo jeje.
Suerte!
Título: Re: Robot Hexapodo
Publicado por: MGLSOFT en 16 de Enero de 2013, 13:23:02
Citar
hasta tiro humito 

Fumar es perjudicial para la salud !!  :mrgreen: :mrgreen:
Título: Re: Robot Hexapodo
Publicado por: willynovi en 16 de Enero de 2013, 15:53:32
En fin, dentro de poco voy a estar en carrera de nuevo jeje.

Lo bueno de esta carrera es que ganamos todos  8)
Título: Re: Robot Hexapodo
Publicado por: pajaro en 16 de Enero de 2013, 22:05:12
Hola Gera

a mi los chip en montaje tqfp y smd me dan un miedo que pa que
hace un tiempo cuando me informe en soldar esos "tamaños" encontre un truco para ellos,
un aleman o un ingles estañaba primero las pistas y luego con la maya extendia el
cobre por todas y el cobre de sobras se lo comia la maya y
despues con una lupa de estas de relojero miraba las pistas y si no estab seguro
media continudidad con el polimetro y en ultimo lugar le ponia flush, ese bote pequeño, la de pincel parecia agua
y con unas pinzas y la lupa de relojero ponia el chip en su sitio y con un soldador,
 no de los de aire caliente, si  no de los otros soldaba el chip.

yo nunca lo intente, pero lo hacia que parecia tan sencillo... pero uf
no debe de serlo

voy a buscar el enlace,.. y lo pongo


Título: Re: Robot Hexapodo
Publicado por: MGLSOFT en 16 de Enero de 2013, 22:07:38
Así lo hago yo, como describió Pájaro, y lo pongo antes que nada en el circuito, de modo que pueda medir continuidad del circuito antes de soldar el resto...
Título: Re: Robot Hexapodo
Publicado por: falflores en 17 de Enero de 2013, 21:06:54
Hola amigos, gracias por ir compartiendo todos sus avances, si no les importa, me gustaría unirme a este hilo!, me dejó flipado el video del PhantomX y me emociona mucho la idea de fabricar uno, acabo de pedir el día de hoy unos servos en DX de 3.94 dólares, con los que haré pruebas, he hecho algunos ensayos con micros, pero nunca un proyecto completo, y me gustaría hacer este, tengo ya bastante experiencia en progrmar en CCS, y en lo que los pueda ayudar, encantado, de hecho, tengo un código para generar tantos PWM como salidas tenga el micro, es algo parecido a lo que están realizando, solo que la resolución es mas baja, no recuerdo cuanto. Estoy por salir del trabajo, cuando llegue a mi casa lo posteo por si quieren hecharle un vistazo. Saludos a todos desde México!!!
Título: Re: Robot Hexapodo
Publicado por: willynovi en 17 de Enero de 2013, 23:11:58
Hola falflores, bienvenido al hilo  :)
Todo lo que quieras aportar será bienvenido.
El tema del hexapod supongo que varios quieren hacerse uno, así que este hilo resulta como un conglomerado de ideas y como veras tambien de ejemplos, por supuesto que no de como hacerse un hexapod desde cero, pero creo que ayuda un poco.

Por ahora los que venimos adelantando algo somos Gera y yo. Uno con CCS y otro con C18, pero los programas son similares y simples así que creo facil de transportar de uno a otro.

Yo por ahora estoy desarrollando tambien algo en Visual C++ para el soft de la PC, no es mucho lo que tengo, tengo que probar varias cosas y funcionando medianamente bien les comparto los avances.
En estos días me voy a dedicar un poco a construir un modelo de una pata para hacer las primeras pruebas con los servos.
Título: Re: Robot Hexapodo
Publicado por: falflores en 18 de Enero de 2013, 02:46:35
gracias willynovi, que bien que van avanzando, espero poder contribuir, por lo pronto les dejo el código que tengo para manejar 8 servos y 8 LEDs, que en esencia es lo mismo, equivalente a tener 18 servos, los servos tienen como 15 pasos, se que no es mucha resolución, pero tal vez se pueda mejorar o sacar alguna idea de ahí, por cierto, también tengo un programa que resolvía la cinemática inversa de 2 grados de libertad, tal vez pueda ser útil, ese también lo posteo, solo que tengo que comentarlo, haber si me acuerdo, por que tiene como 2 años que lo hice XD.

El programa del control de servos y LEDs es muy largo, por lo pronto lo pongo tal como está, pero pienso quitarle la parte del menú y de los LEDs, para que sea más entendible. Saludos!

Código: [Seleccionar]
/* Este código sirve para controlar por medio de PWM el encendido de hasta
8 LEDs, y la posición de hasta 8 servos, por medio de comandos seriales
propios del puerto de comunicaciones seriales del PIC16F887, aunque
fácilmente se puede migrar a otros dispositivos.

En una pantalla LCD de 16x2 caracteres, se puede ver el menú de la aplicación
el cuál consta de un menú principal, al mandar el comando ASCII "ENTER" que
corresponde con el valor decimal 13, se pasa a la siguiente pantalla, para
        volver al menu principal, es con ESCAPE, en el segundo menú es donde
da a escoger entre controlar los LEDs o los servos, con los números 1 y 2
respectivamente, posteriormente se muestra el número actual del LED o servo
que se esté controlando, pudiendo cambiar de número solo con presionar el
correspondiente dígito, si se presiona un número que no es, manda un mensaje
de error, al presionar "-" o "=" (lo deje con el signo igual, por que mi lap
no tiene signo más sin presionar shift) decremente o incrementa el pwm del
dispositivo en cuetión, con la barra espacioadora se va a ambos extremos, 0 o
180 grados en los servos, o prendido o apagado en los LEDs, toda la info que
se imprimie en el LCD también se manda serialmente a la computadora.
*/

#include <16F887.h>
#fuses HS, MCLR, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP, NODEBUG
#use delay(clock=20Mhz)
#use rs232(baud=115200, xmit=PIN_C6, rcv=PIN_C7,bits=8,parity=N) // Definición del RS232
#include <total_lcd.h>

#define LED1 PIN_B5
#define LED2 PIN_B4
#define LED3 PIN_B3
#define LED4 PIN_B2
#define LED5 PIN_B1
#define LED6 PIN_B0
#define LED7 PIN_C5
#define LED8 PIN_C4

#define SERVO1 PIN_A0
#define SERVO2 PIN_A1
#define SERVO3 PIN_A2
#define SERVO4 PIN_A3
#define SERVO5 PIN_A4
#define SERVO6 PIN_A5
#define SERVO7 PIN_E0
#define SERVO8 PIN_E1
#define SERVO9 PIN_E2

#define MIN_SERVO 9
#define MAX_SERVO 34
#define DEGREE 6.923
#define ENTER 13
#define ESCAPE 27
#define REGRESO 8


int8 duty_cycle=0,n=0;
int8 LED[8] = {0,0,0,0,0,0,0,0};
int8 SERVO[8] = {0,0,0,0,0,0,0,0};
int8 directory=0;
//int16 t=1000;
int1 flag_data=1;
char data=ESCAPE,last_data;
float degress[8] = {0,0,0,0,0,0,0,0};

void configure()
{
set_tris_A(0x00);
set_tris_B(0x00);
set_tris_C(0x00);
set_tris_D(0x00);
set_tris_E(0x00);
output_A(0x00);
output_B(0x00);
output_C(0x00);
output_D(0x00);
output_E(0x00);
setup_timer_0(T0_INTERNAL|T0_DIV_1);
enable_interrupts(INT_TIMER0);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
lcd_init();
}

void print_LED()
{
flag_data=0;
printf(lcd_putc,"\fPulsa + - SPACE\n  LED %d: %U %%" ,(n+1),LED[n]);
printf("Pulsa + - SPACE\rLED %d: %U %%\r\r" ,(n+1),LED[n]);
}


void print_servo()
{
flag_data=0;
printf(lcd_putc,"\fPulsa + - SPACE\nSERVO%d: %.2f¡"(n+1),degress[n]);
printf("Pulsa + - SPACE\rSERVO%d: %.2f¡\r\r"(n+1),degress[n]);
}

void print_error()
{
lcd_putc("\f     ERROR!     \nOpcion invalida");
lcd_putc("ERROR!  Opcion invalida\r\r");

delay_ms(500);
data=last_data;
flag_data=1;
}

//==========================
void main()
{
configure();
lcd_putc("LCD OK!!!");
delay_ms(500);
while(TRUE)
{
if(flag_data==1&&directory==0)
{
flag_data=0;
switch(data)
{
case ESCAPE:
lcd_putc("\f--- M E N U ---\n   PRESS ENTER");
printf("--- M E N U ---\r   PRESS ENTER\r\r");
while(data!=ENTER) {}
directory=0;
break;
case ENTER:
lcd_putc("\f 1 = LEDs\n 2 = SERVOS ");
printf("1 = LEDs\r 2 = SERVOS \r");
directory=1;
break;
default: print_error(); break;
}
}
if(flag_data==1&&directory==1)
{
flag_data=0;
switch(data)
{
case '1':
lcd_putc("\fSelecciona led:\n     1 -- 8");
printf("Selecciona led: 1 -- 8\r");
directory=2;
break;
case '2':
lcd_putc("\fSelecciona servo\n     1 -- 8");
lcd_putc("Selecciona servo: 1 -- 8\r");
directory=3;
break;
case ESCAPE:
directory=0;
flag_data=1;
break;
default: print_error(); break;
}
}
if(flag_data==1&&directory==2)
{
flag_data=0;
switch(data)
{
case '1': n=0; print_LED(); directory=4; break;
case '2': n=1; print_LED(); directory=4; break;
case '3': n=2; print_LED(); directory=4; break;
case '4': n=3; print_LED(); directory=4; break;
case '5': n=4; print_LED(); directory=4; break;
case '6': n=5; print_LED(); directory=4; break;
case '7': n=6; print_LED(); directory=4; break;
case '8': n=7; print_LED(); directory=4; break;
case ESCAPE:
directory=0;
flag_data=1;
break;
default: print_error(); break;
}
}
if(flag_data==1&&directory==3)
{
flag_data=0;
switch(data)
{
case '1': n=0; print_servo(); directory=5; break;
case '2': n=1; print_servo(); directory=5; break;
case '3': n=2; print_servo(); directory=5; break;
case '4': n=3; print_servo(); directory=5; break;
case '5': n=4; print_servo(); directory=5; break;
case '6': n=5; print_servo(); directory=5; break;
case '7': n=6; print_servo(); directory=5; break;
case '8': n=7; print_servo(); directory=5; break;

case ESCAPE:
directory=0;
flag_data=1;
break;
default: print_error(); break;
}
}
if(flag_data==1&&directory==4)
{
flag_data=0;
switch(data)
{
case '=':
{
if(LED[n]<100) LED[n]+=10;
print_LED();
}
break;
case '-':
{
if(LED[n]>0) LED[n]-=10;
print_LED();
}
break;
case ' ':
{
if(LED[n]<50) LED[n]=100;
else LED[n]=0;
print_LED();
}
break;
case '1': n=0; print_LED(); directory=4; break;
case '2': n=1; print_LED(); directory=4; break;
case '3': n=2; print_LED(); directory=4; break;
case '4': n=3; print_LED(); directory=4; break;
case '5': n=4; print_LED(); directory=4; break;
case '6': n=5; print_LED(); directory=4; break;
case '7': n=6; print_LED(); directory=4; break;
case '8': n=7; print_LED(); directory=4; break;
case ESCAPE:
directory=0;
flag_data=1;
break;
default: print_error(); break;
}
}
if(flag_data==1&&directory==5)
{
flag_data=0;
switch(data)
{
case '=':
{
if(SERVO[n]>MIN_SERVO)
{
SERVO[n]--;
degress[n]-=DEGREE;
print_servo();
}
}
break;
case '-':
{
if(SERVO[n]<MAX_SERVO)
{
SERVO[n]++;
degress[n]+=DEGREE;
print_servo();
}
}
break;
case ' ':
{
if(SERVO[n]<23)
{
SERVO[n]=MAX_SERVO;
degress[n]=179.998;
}
else
{
SERVO[n]=MIN_SERVO;
degress[n]=0;
}
print_servo();
}
break;
case '1': n=0; print_servo(); directory=5; break;
case '2': n=1; print_servo(); directory=5; break;
case '3': n=2; print_servo(); directory=5; break;
case '4': n=3; print_servo(); directory=5; break;
case '5': n=4; print_servo(); directory=5; break;
case '6': n=5; print_servo(); directory=5; break;
case '7': n=6; print_servo(); directory=5; break;
case '8': n=7; print_servo(); directory=5; break;

case ESCAPE:
directory=0;
flag_data=1;
break;
default: print_error(); break;
}
}
}
}

#INT_TIMER0
void timer0()
{
if(duty_cycle==0)
{
if(LED[0]) output_high(LED1);
if(LED[1]) output_high(LED2);
if(LED[2]) output_high(LED3);
if(LED[3]) output_high(LED4);
if(LED[4]) output_high(LED5);
if(LED[5]) output_high(LED6);
if(LED[6]) output_high(LED7);
if(LED[7]) output_high(LED8);

if(SERVO[0]) output_high(SERVO1);
if(SERVO[1]) output_high(SERVO2);
if(SERVO[2]) output_high(SERVO3);
if(SERVO[3]) output_high(SERVO4);
if(SERVO[4]) output_high(SERVO5);
if(SERVO[5]) output_high(SERVO6);
if(SERVO[6]) output_high(SERVO7);
if(SERVO[7]) output_high(SERVO8);
}

if(LED[0]==duty_cycle) output_low(LED1);
if(LED[1]==duty_cycle) output_low(LED2);
if(LED[2]==duty_cycle) output_low(LED3);
if(LED[3]==duty_cycle) output_low(LED4);
if(LED[4]==duty_cycle) output_low(LED5);
if(LED[5]==duty_cycle) output_low(LED6);
if(LED[6]==duty_cycle) output_low(LED7);
if(LED[7]==duty_cycle) output_low(LED8);
if(SERVO[0]==duty_cycle) output_low(SERVO1);
if(SERVO[1]==duty_cycle) output_low(SERVO2);
if(SERVO[2]==duty_cycle) output_low(SERVO3);
if(SERVO[3]==duty_cycle) output_low(SERVO4);
if(SERVO[4]==duty_cycle) output_low(SERVO5);
if(SERVO[5]==duty_cycle) output_low(SERVO6);
if(SERVO[6]==duty_cycle) output_low(SERVO7);
if(SERVO[7]==duty_cycle) output_low(SERVO8);

duty_cycle++;
if(duty_cycle==101) duty_cycle=0;
SET_TIMER0(0);
}

#int_rda
void serial_isr()
{
if (kbhit())
{
last_data=data;
data=getch();
printf(data);
flag_data=1;
}
}
Título: Re: Robot Hexapodo
Publicado por: willynovi en 29 de Enero de 2013, 11:09:03
Ayer fui a buscar los servos al correo así que ya estan esperando que les haga la estructura, tengo una sola pata  :(

Estoy teniendo problemas con el control del servo con valores bajos, tengo que ver si puedo medir el ancho del pulso para descartar si es eso o algún problema del mismo servo.
De todas formas eso es para que el rengo sea 270°, o sea que si lo hago a 180° y le sumo el error no tendría que tener problemas.

Falflores, estuve revisando tu programa, creo que con el cristal de 20mhz tendrias que usar el control de los servos como alguno de los ejemplos que habia puesto enlaces mas arriba.

http://www.todopic.com.ar/foros/index.php?topic=39181.msg331333#msg331333
Título: Re: Robot Hexapodo
Publicado por: elgarbe en 25 de Mayo de 2014, 14:38:21
Hola, se que este post es viejito, pero lo vengo leyendo varias veces y este año estamos intentando de armar el hexa con mis alumnos. Han podido avanzar algo más? yo si voy aanzando puedo ir poniendo los resultados acá si les parece...

Saludos!
Título: Re: Robot Hexapodo
Publicado por: willynovi en 25 de Mayo de 2014, 20:31:26
Yo no he hecho mucho mas desde el último post, los servos quedaron en la misma caja que vinieron de china  :D

Estoy acomodandome y tengo que rearmar el taller, ahí arranco denuevo, hoy es el único proyecto que tengo.

Por tus avances, pues claro que puedes compartirlos, es mas, si no los haces  :5]
 :D :D :D

Che, muy bueno eso de incentivar a tus alumnos a la electrónica, no han pensado en participar en alguna de las competencias de robotica que hay por el pais?
Título: Re: Robot Hexapodo
Publicado por: gera en 23 de Enero de 2015, 18:03:31
Buenassss!! Han pasado largos años, no? :D
La verdad que el trabajo me obligó a dejar pendientes varios proyectos, incluido este. Pero gracias a una operación del tobillo (que salió muy bien por suerte) he tenido 2 meses de licencia sin poder moverme, por lo tanto aproveché para avanzar con mis proyectos.

Hace un par de días terminé de ensamblar el bicho, y ahora estoy peleando con el código:

(http://s21.postimg.org/q2lsz67gz/2015_01_21_11_46_56.jpg) (http://postimg.org/image/q2lsz67gz/) (http://s21.postimg.org/tpwyrhqab/2015_01_21_12_21_07.jpg) (http://postimg.org/image/tpwyrhqab/) (http://s21.postimg.org/z5evjxwlv/2015_01_21_12_21_36.jpg) (http://postimg.org/image/z5evjxwlv/)

El método que utilizo para controlar los 18 servos parecido al que explica Guillermo en este hilo (http://www.todopic.com.ar/foros/index.php?topic=20918.0).
Pero al ver las señales en el osciloscopio, hay ligeros errores en los tiempos (alrededor de +1ms). Supongo que es por lo que demora en procesar la ISR del timer. Por ahora este es mi código:

Código: C
  1. #INT_TIMER1
  2. void timer1_isr(){
  3.    int i=0;
  4.    
  5.    output_toggle(PIN_D4); //esto lo uso para medir el período de interrupcion del tmr1
  6.    
  7.    for(i=0; i<18; i++){
  8.       if(counter == servo_duty[i])
  9.          output_low(servo_pin[i]);
  10.    }
  11.    
  12.    counter++;
  13.    if(counter >= 400){    //400*50us = 20ms (period required for drive a servo)
  14.       counter=0;
  15.       for(i=0;i<18;i++)
  16.          output_high(servo_pin[i]);
  17.    }
  18.    
  19.    set_timer1(PRELOAD_TMR1);
  20. }

El timer está calculado para interrumpir cada 50us. El array servo_duty[] contiene los duty para cada servo, y el array servo_pin[] contiene los pines físicos donde se encuentra cada servo.

En este paper (http://www.naun.org/main/NAUN/circuitssystemssignal/cssp-102.pdf), el autor utiliza este mismo método, pero no veo que tenga ninguna consideración con el tiempo de la ISR.

Voy a seguir probando y les comento cómo me fue.

Saludos!!
Título: Re: Robot Hexapodo
Publicado por: willynovi en 27 de Enero de 2015, 20:59:48
Hola Gera, me alegro porque haya salido todo bien la operación....

Te quedó con muy buena pinta el hexapodo  ((:-))

Respecto a la rutina de interrupción, no le encuentro nada raro, es bastante simple y funciona...

Ahora lo que dices del error de 1ms, me parece un poco mucho, ya que es casi el valor de la mitad del ancho del pulso.

Mi programilla no lo he probado con osciloscopio, solo he hecho pruebas directamente con los servos y por ahora funciona bien, el único problema que tuve es de que a angulos muy pequeños el servo no responde bien, pero no se bien si el problema es en el servo o en el programa, ya que el servo es para 180° y yo lo estaria usando para 270°, entonces si lo uso a 180° andaria perfecto.

La diferencia que le veo a tu forma de atender a los servos es que el programa esta interrumpiendo siempre a 50us, en cambio el mio interrumpe cada 40us, pero solo durante el ancho del pulso, es decir durante 2 ms y luego no interrumpe hasta que los pulsos deben ponerse en alto nuevamente.

Con esa idea yo cambiaría tu programa y que el contador solo incremente hasta 50, que es cuando todos los servos ya estan en nivel bajo.
Luego antes de salir de la rutina de la interrupción cargas el valor del tmr1 para que vuelva a interrumpir dentro de 17,5 ms.



Título: Re: Robot Hexapodo
Publicado por: gera en 28 de Enero de 2015, 11:52:20
Hola Gera, me alegro porque haya salido todo bien la operación....

Te quedó con muy buena pinta el hexapodo  ((:-))

Muchas graciass!! :D

Citar
Con esa idea yo cambiaría tu programa y que el contador solo incremente hasta 50, que es cuando todos los servos ya estan en nivel bajo.
Luego antes de salir de la rutina de la interrupción cargas el valor del tmr1 para que vuelva a interrumpir dentro de 17,5 ms.
Es muy buena, así voy a tener tiempo para dejar que el procesador atienda otras cosas (como la trama serial). Leí por ahí un método muy bueno que utiliza dos timers. Uno que modula los anchos de pulsos dentro de los primeros 2,5ms, y otro que temporiza el periodo total de 20ms. Vamos a probar con ese método a ver qué resultados obtengo.

Igualmente tengo ganas de comprarme una placa controladora de 32 servos (http://www.dx.com/es/p/32-channel-servo-motor-control-driver-board-for-arduino-robot-project-250698#.VMj2-_6G-5M) así me olvido de ese tema y me puedo dedicar de lleno a programar el andar del bichito.
El tema de la cinemática inversa ya lo tengo resuelto en papel. Vamos a ver qué tal anda cuando lo implemente. Los mantengo al tanto ;)

Saludos y gracias!
Título: Re: Robot Hexapodo
Publicado por: willynovi en 28 de Enero de 2015, 15:05:21
Sin dudas iría por la placa esa para los 32 servos, pero no me le animo a DX, tengo mis ciertas dudas con el tema de la aduana...

Has comprado hace poco algo por DX?
Que resultado has tenido?

Estuve mirando y hay unos kit de robotica que estaria bueno para mi cuñadito que quiere iniciarse en la robotica.
Título: Re: Robot Hexapodo
Publicado por: miquel en 28 de Enero de 2015, 17:22:12
Hola!  Para manejar muchos servos es mejor no hacerlo directamente con el micro, es mejor utilizar una controladora de servos. De esta manera el micro solo tiene que pasarle por I2C los tiempos de cada servo, lo cual aligera notablemente el trabajo del micro. Hace tiempo monte una controladora con un PCA9685 y funciono muy bien y ademas muy barata:
http://www.todopic.com.ar/foros/index.php?topic=42930.0 (http://www.todopic.com.ar/foros/index.php?topic=42930.0)

Saludos y suerte con el hexapodo,

Miquel

Título: Re: Robot Hexapodo
Publicado por: willynovi en 28 de Enero de 2015, 19:14:04
Claro que usar un micro especifico para el control de los servos es mejor, aunque yo estoy tratando de hacerlo con un pic para poder meterle algunas cosillas mas,
estoy pensando en incluir en el pic de control de los servos algunos movimientos básicos para tambien sacarle un poco procesamiento al cerebro del robot,
veremos como sigue esto....
Título: Re: Robot Hexapodo
Publicado por: KILLERJC en 28 de Enero de 2015, 20:31:24
Sin dudas iría por la placa esa para los 32 servos, pero no me le animo a DX, tengo mis ciertas dudas con el tema de la aduana...

Has comprado hace poco algo por DX?
Que resultado has tenido?

Estuve mirando y hay unos kit de robotica que estaria bueno para mi cuñadito que quiere iniciarse en la robotica.

Yo hasta ahora siempre compre a DX, soy de argentina y ni siquiera de cordoba o buenos aires, lo unico que si tengo que pagar 40$ al correo por paquete.

pero siempre compre por menos de 25U$S, a veces me tarda 1 mes en llegar y el otro dia me sorprendio por que me llego a las 2 semanas u algo asi.
Hasta ahora no tuve nunca problemas con eso.

Pedi por ebay una vez y nunca llego.
Todavia me faltan por probar todas las demas.
Título: Re: Robot Hexapodo
Publicado por: gera en 30 de Enero de 2015, 11:08:56
Yo hasta ahora siempre compre a DX, soy de argentina y ni siquiera de cordoba o buenos aires, lo unico que si tengo que pagar 40$ al correo por paquete.

pero siempre compre por menos de 25U$S, a veces me tarda 1 mes en llegar y el otro dia me sorprendio por que me llego a las 2 semanas u algo asi.
Hasta ahora no tuve nunca problemas con eso.

Pedi por ebay una vez y nunca llego.
Todavia me faltan por probar todas las demas.

Yo también compro seguido a DX y HobbyKing. Nunca tuve problemas, salvo que últimamente la AFIP está muy rompe quinotos y para importar te exige sacar una clave fiscal y hacer todo un trámite previo a la compra. Además de pagar el 35% de impuestos por compra en el exterior más 50% de importación. Así y todo te termina saliendo más barato que comprar en ML o casas de aeromodelismo.
Otra cosa, sólo se pueden hacer 2 compras por año, con un límite de U$S 1000 por compra (menos una franquicia de U$S 25 al año).

Saludos!!

PD: No es mi caso, pero si tenés un amigo en la aduana, el trámite se agiliza bastante...
Título: Re: Robot Hexapodo
Publicado por: KILLERJC en 30 de Enero de 2015, 11:32:19
A mi lo unico que me molesto la aduana fue por un kit de evaluacion que pedi a TI. Aca me pidieron la clave fiscal y me lo tuvieron retenido mucho tiempo.

Por lo demas como es DX, no tuve que hacer nada, no tuve que pagar nada ademas de lo que pagaba por paypal, simplemente ir y abonar $40 en el correo por cada paquete enviado. Como dije todo menos de 25U$S ( incluso  el kit que estaba 24.99 ).

Con respecto a la cantidad de compras parece que por DX no le dan importancia, al menos yo ya pedi 5 veces desde Julio a Enero ( 3 el año pasado + pedido de TI, 2 este año ), y algunos vienen en paquetes separados (no se como contara eso ).

Para mi lo importante es mantenerse debajo de ese valor de 25 dolares. Tal ves tambien sea el peso, o simplemente suerte. El tema es cuando tenes que comprar algo mas caro...

Por ejemplo TI lo mando por Fedex el cual preparo todos los papeles para la aduana, entonces paso si o si por ahi.
Título: Re: Robot Hexapodo
Publicado por: xelieve en 30 de Enero de 2015, 21:22:30
hola buenas, tengo una duda tengo mi hexapodo listo (carcasa) y voy ideando un codigo para poder controlar 18 servos o mas por medio del pic 18f4550, mi profesor me paso un codigo para controlar servos, pero solo es util para 14, mi placa es una simple con el pic y 22 salidas pero por mucho q conecto el labview no me cambian los servos.

Título: Re:Robot Hexapodo
Publicado por: javihont en 27 de Noviembre de 2015, 14:40:52
Una preguntilla... ¿Cómo se alimentaría un hexápodo con 18 servos y una LiPo de 7.4 V a 5 A ? ... Si pongo la LiPo directa se me sobrecalientan los servos... ¿ Con un UBEC ?, ¿ Qué tipo de UBEC sería el más adecuado ?