PDA

Ver la versión completa : Ayuda robot+rs232+SDL+GP2X :)



daesir
04/05/2007, 04:47
Hola!
Estoy haciendo en la universidad un robotito, y mi objetivo final sería lograr controlar sus movimientos con la GP2X. Heme aquí para pedir ayuda en esta comunidad, ya que en algunos aspectos no tengo mucha idea (como la programación del puerto serie). Pero no quiero preguntaros dos cosas y a otra cosa mariposa, lo que busco más bien es "charlar" un poco, sobre lo que os parece, ideas que vayan surgiendo, comentar los aspectos del montaje, etc.

El robot tiene un puerto serie, y lo he programado de manera que reciba caracteres y se mueva en consecuencia (una "w" adelante, una "a" izquierda, etc.), de manera que conectándolo al puerto rs232 del PC y usando Hyperterminal o Minicom se puede controlar.

A partir de este punto, los pasos a seguir que me he planteado serían:
1) Hacer un programa en SDL que reemplace lo que estoy haciendo ahora mismo con el hyperterminal: enviar caracteres por el puerto serie según la tecla pulsada, y controlar así el robot.
2) Portar ese programa a la GP2X.
3) Encontrar o montarme un cable que conecte la GP2X con el puerto serie del robot.

Así que, comenzando por el paso 1), me pregunto cómo puedo enviar una "a" o cualquier otro caracter desde un programa C, de manera sencilla.
He encontrado el que parece ser el texto mas típico del asunto: "CÓMO Programar el puerto serie en Linux (http://es.tldp.org/COMO-INSFLUG/COMOs/Programacion-Serie-Como/Programacion-Serie-Como.html)", pero me resulta un poco lioso, así que seguiré buscando; si tuvieseis algún ejemplo más sencillo o algún enlace a una web donde se hable del asunto, no dudéis en ponerlo ;-)

Salu2

neglox
04/05/2007, 09:47
Mira esta otra guia, está en inglés pero tiene ejemplos en C ya escritos y sencillos sobre como abrir el puerto, mandar datos , etc... todo para entornos POSIX.

http://www.easysw.com/~mike/serial/serial.html

Ya que estamos pongo un ejemplo:



#include <stdio.h> /* Standard input/output definitions */
#include <string.h> /* String function definitions */
#include <unistd.h> /* UNIX standard function definitions */
#include <fcntl.h> /* File control definitions */
#include <errno.h> /* Error number definitions */
#include <termios.h> /* POSIX terminal control definitions */

int open_port(void)
{
int fd; /* File descriptor for the port */
fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1)
{
perror("open_port: Unable to open /dev/ttyS0 - ");
}
else
fcntl(fd, F_SETFL, 0);

return (fd);
}

int main()
{
int fd;
fd=open_port();
n = write(fd, "a", 1);
if (n < 0)
fputs("No se pudo enviar la se&#241;al!\n", stderr);
close(fd);
return 1;
}

daesir
04/05/2007, 22:29
MUCHAS gracias, en esa web est&#225; explicado el tema de manera bastante clara; creo que el paso 1 va a ser pan comido con esa gu&#237;a :brindis:

mkvenner
05/05/2007, 10:27
no se a cuanto asciende tu presupuesto pero habia visto en algun lado unos modulos bluetooth por puerto serie que eran la ca&#241;a, la co&#241;a del asunto es ni tenias que preoguparte por los drivers, simplemente se enchufaban y a tirar millas, y si no siempre puedes pillarte unos modulos de radiofrecuencia de cebek por unos 20€ y hacer el apa&#241;o para comvertirlo en inalambrico xD


un saludo.

mikestorm
30/05/2007, 14:02
we, parece que me has "copiado"... he hecho lo mismo, le tengo montado con un pic 16f877 que recibe ordenes por un puerto serie, por otro tengo un sonar y espero poder a&#241;adirle sensores en un futuro. Las ordenes... xD, las mismas wasd + q y e para parar y frenar. Lo que yo he hecho es un programa en C para la gp2x por serie q envia y recibe los datos del robot. para transmitir uso unos modulos aurel XTR903a4 que son un puerto serie virtual emitiendo a 433 mhz. Aunque, ultimamente, he desechado los modulos por una fonera, la fonera tiene puerto serie y wifi... lo que da un "poquito" mas de movilidad.

DMusta1ne
30/05/2007, 18:33
Una pregunta, con una respuesta casi evidente. Todo esto se podría utilizar para hacer una librería para poder comunicar 2 gp2x? por ejemlo, programar un juego en C/C++ y utilizar esa librería para hacer un juego a 2 players mediante un cable EXT-EXT que conecte los dos puertos series de las 2 gp2x? Me imagino que si, pero quiero saber si hay algún inconveniente...

daesir
31/05/2007, 11:45
Hola
al principio el proyecto estaba muy bien, y era interesante, pero hay que ver lo mal que nos ha ido a mi compañero y a mi para hacerlo... en sí la idea que tenía no es complicada, pero nos han "machacado" con muchísimo trabajo en las prácticas de las otras asignaturas (todo esto del robot era para la asignatura de robótica en la universidad) y no hemos podido dedicarle al robot ni un tercio de lo que nos hubiera gustado.

[Modo auto-lamento ON]
Pedí por ebay un cable del Samsung e810, para conseguir el conector EXT, pero ha llegado casi una semana después de la entrega de los robots... tampoco es muy grave, porque dos días antes lo perdimos al olvidarlo en el autobús :(:llorosr:

Así que al final hemos entregado una cutre-cosa con ruedas que se controlaba con el teclado y un prgograma en sdl... nada de gp2x. El profesor nos dijo que ya tenía decidida la nota para nosotros pero no nos la quiso decir, seguramente (espero!) que sea un 5,00 pelado y a correr.

Ya ve(i)s, con lo bien que empecé en el primer post, y al final na de na.

La parte buena es que si nos queremos quedar con la placa que nos dieron al principio, podemos hacerlo pagandola a un precio muy bueno, por lo que me he animado y me la he quedado para poder hacer cosillas este verano.
[Modo auto-lamento OFF]


Por cierto mkvenner

no se a cuanto asciende tu presupuesto pero habia visto en algun lado unos modulos bluetooth por puerto serie que eran la caña, la coña del asunto es ni tenias que preoguparte por los drivers, simplemente se enchufaban y a tirar millas, y si no siempre puedes pillarte unos modulos de radiofrecuencia de cebek por unos 20€ y hacer el apaño para comvertirlo en inalambrico xD

No había llegado a responderte pero muchas gracias por las ideas, el módulo de bluetooth que miré me pareció un poco caro pero el tema de la radiofrecuencia esta bien... aunque como supondrás al final no he hecho nada de esto.



para transmitir uso unos modulos aurel XTR903a4 que son un puerto serie virtual emitiendo a 433 mhz.
Esto exactamente a dónde te refieres que está montado? y a dónde emite/recibe datos? Esque no lo he pillado muy bien, pero si es para controlar el robot desde la gp2x como con el kit de cebek que sugería mkvenner, me parece muy chulo poder librarse de los cables :)



programar un juego en C/C++ y utilizar esa librería para hacer un juego a 2 players mediante un cable EXT-EXT que conecte los dos puertos series de las 2 gp2x?

No llegué a portar el programa en SDL para la gp2x, pero por lo que me informé en un principio sí se podría, si se conectan la salida de uno con la entrada del otro y viceversa, y se configuran las dos a la misma frecuencia. Al fin y al cabo el puerto EXT debería poder funcionar como un puerto serie normal y corriente, compatible con la norma TTL. Así que tendría su pin RX y su pin TX para recibir y emitir datos.

También se me ha ocurrido que si el firmware de la gp2x tiene soporte para conectarse por USB al PC como si estuviese en la red local, puede que se pudiese hacer que dos gp2x, conectadas por usb a un HUB usb de esos que tienen 3 o 4 en 1, se viesen entre sí como si estuviesen en una LAN...

mikestorm
31/05/2007, 23:04
Los modulos son simplemente un par de circuitos que se alimentan a 3.3v y van conectados al puerto serie, uno en cada lado, y hacen como un cable serie virtual... pero de unos 250 metros (supuestos claro... yo no he probado mas de 10)