Inicio › Foros › Foro AR.Drone › Problemas puerto serie AR Drone 1.0
- Este debate tiene 3 respuestas, 2 mensajes y ha sido actualizado por última vez el hace 11 años, 3 meses por Aníbal.
-
AutorEntradas
-
28 agosto, 2013 a las 13:00 #6145
Hola a todos, después de mil intentos y 3 semanas intentando solucionar el problema sin éxito, recurro a este foro para ver si alguien puede solucionarme mi problema.
El tema es que quiero incorporarle un GPS a mi drone, el cual va conectado al puerto serie del mismo. Antes de instalar el GPS me bajé el «Realterm» para comprobar que la comunicación serie entre drone y PC (que al final será drone-GPS) funciona correctamente.
El problema es que desde el drone, sí que puedo enviar mensajes a la consola de Realterm, pero a la inversa no consigo leer nada, que es lo que necesito, leer datos en el drone procedentes del GPS.
He intentado todo, probando desde el firmware 1.3.3 hasta el 1.11.5, os adjunto el código del programa en C que estoy utilizando para la lectura/escritura en el puerto serie.No sabéis cuánto agradecería que alguien diera con la solución de esto!
PD: La conexión del cable serie con el puerto del drone está bien hecha, la he comprobado varias veces (RX -> TX ; TX -> RX), estoy trabajando con un baud rate de 115200(el que viene por defecto del drone), también he probado a leer directamente el puerto serie sin utilizar el programa en C adjunto -> cat /dev/ttyPA0 y nada de nada…
#include <string.h> #include <fcntl.h> #include <errno.h> #include <stdint.h> #include <termios.h> #include <stdio.h> #include <unistd.h> #include <math.h> #define serial_port "/dev/ttyPA0" #define salir "salir" #define enviar "enviar" #define recibir "recibir" int open_serial(void) { int socket_serial; struct termios t_serial; bzero(&t_serial, sizeof(t_serial)); // limpiamos el struct de entrada //abrimos el puerto como luectura y escritura, como no controlador (Cnt+C) y no bloqueante. //socket_serial = open(serial_port, O_RDWR | O_NOCTTY); socket_serial = open(serial_port, O_RDWR | O_NOCTTY | O_NONBLOCK); if (socket_serial < 0) { fprintf(stderr, "No se puede abrir el puerto: %s - %s\n", serial_port, strerror(errno)); _exit(-1); } if (socket_serial > 0) { printf("Puerto abierto en: %s\n", serial_port); } //Configuramos el puerto serie-------------------------------------- //tcgetattr(socket_serial, &t_serial); //cfsetispeed(&t_serial, B115200); //cfsetospeed(&t_serial, B115200); //t_serial.c_cflag |= B115200 | CBAUDEX | CS8 | CSTOPB | CLOCAL | CREAD; t_serial.c_cflag |= B115200 | CBAUDEX | CS8 | CLOCAL | CREAD; t_serial.c_iflag |= IGNPAR; //sin bit de paridad t_serial.c_oflag = 0; //salida en bruto t_serial.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); // caracteres de control //t_serial.c_cc[VTIME] = 0; t_serial.c_cc[VMIN] = 5; //limpiamos el socket y cargamos la configuracion tcflush(socket_serial, TCIOFLUSH); tcsetattr(socket_serial, TCSANOW, &t_serial); /*tcsetattr(socket_serial, TCSAFLUSH, &t_serial); */ return socket_serial; } void write_serial(int socket, char *mensaje) { int msg = 0; msg = write(socket, mensaje, strlen(mensaje)); if (msg <= 0) printf("fallo de escritura \n"); } void read_serial(int socket, char *data) { int msg = 0; msg = read(socket, data, 5); data[msg] = ''; if (msg < 0) { perror("read"); } } int main() { int serial_socket; char mensaje[5]; int dato_size; char dato[5]; char action[30]; serial_socket = open_serial(); while (1) { printf("enviar, recibir o salir? \n"); scanf("%s", action); if (strcmp(action, salir) == 0) { break; } if (strcmp(action, enviar) == 0) { printf("Escribe el mensaje: "); scanf("%s", mensaje); write_serial(serial_socket, mensaje); } if (strcmp(action, recibir) == 0) { read_serial(serial_socket, dato); printf("leido: %s\n", dato); } if (strcmp(dato, salir) == 0) { break; } } printf("bye bye\n"); return 0; }
28 agosto, 2013 a las 15:16 #6151No puedes leer datos del GPS por que el firmware del ardrone no incorpora los drivers del GPS, el problema esta en el propio firmware. No se sí podrás compilar lo necesario para hacerlo funcionar, pero debe ser complicado.
28 agosto, 2013 a las 15:30 #6153No puedes leer datos del GPS por que el firmware del ardrone no incorpora los drivers del GPS, el problema esta en el propio firmware. No se sí podrás compilar lo necesario para hacerlo funcionar, pero debe ser complicado.
Dejando el GPS a parte, tampoco hay manera de enviar desde el PC ningún mensaje al drone vía puerto serie? Como he dicho antes, desde el drone al PC sí que puedo enviarle mensajes, pero a la inversa no.
28 agosto, 2013 a las 15:36 #6154No tengo un ardrone 1.0 y no tengo experiencia en este tipo de conexiones, pero puedes hechar un vistazo a este link a ver si te sirve, http://www.robotappstore.com/Knowledge-Base/2-How-to-Use-a-RealTerm-Terminal/16.html
Y sobre el tema del GPS aquí otro link http://intellidrone.org/?p=23
No se sí te servirá de algo.
-
AutorEntradas
- Debes estar registrado para responder a este debate.