lunes, 31 de diciembre de 2012

Primeros pasos con el ardu-quad-raspbi-copter

... vooooooooolaaaare uoh uoh ...

creo que va siendo hora de desvelar un poco más en que consiste el ardu-quad-rasbi-copter. Desde que vi por primera vez un cuatricóptero (cuadricóptero, quadcopter ...) he tenido ganas de hacerme con uno. Con el paso del tiempo fueron bajando de precio y yo me fui volviendo más exigente, así que mi cuatricóptero tiene que:

  1. Cargar con al menos dos cámaras que graben todo el vuelo desde el cuatricóptero
  2. transmitir el vídeo hacia la emisora
  3. ser barato
  4. volar ininterrumpidamente durante un mínimo de 15 minutos
  5. ser controlado desde el móvil
  6. esquivar objetos
  7. no romperse durante el primer vuelo
  8. usar Arduino
veamos como solucionar esto y ¿dónde aparece por aquí un RaspberryPi?
Conectar dos cámaras y que transmitan en tiempo real, puede ser lo más complicado/caro que lleva el proyecto. Si a esto le unimos que tiene que ser controlado desde un Android, podemos ir despidiéndonos de 500€ solo en esta parte. Pero llegó SuperRaspberryPi para solucionar esto.

las cámaras

¿puede haber algo más fácil en esta vida que conectar dos webcams usb? Seguro que no, así que las cámaras irán conectadas al RaspberryPi (seguramente haya que usar alimentación a parte). Fáááácil fácil.

transmitir vídeo

esto aún lo tengo que limar un poco, pero con algún servidor de vídeo en el RaspberryPi, seguro que se soluciona en poco tiempo.

control desde Android

esta parte me ha costado horas y horas de estudio, hasta que llegó a mis manos mi primer RaspberryPi. La solución también es muy fácil:
  • los móviles tienen wifi
  • puedo ponerle un wifi usb al RaspberryPi
  • son linuxes
  • puedo hacer una conexión punto-a-punto
  • puedo controlar el RaspberryPi vía web con JQuery por ejemplo
  • no tengo ni idea de JQuery

¿y el Arduino?

Pues al Arduino le toca lo más duro:
  • controlar los motores
  • controlar los desplazamientos "involuntarios"
  • controlar la batería
  • disparar el láser mortal (aunque me estoy pensando ponerle esto también al RaspberryPi).

¿y todo esto para qué?

Bueno ... que clase de superheroe ... no vuela? ¿Aquaman?
Y para terminar un pequeño vídeo con la primera prueba:
El sonido se atrasa un poco, no se porque.
¿que os parece el proyecto?

17 comentarios:

  1. ya estoy loco mirando, arducopters, podrías detallar los componentes, he estado mirando varias web pero no he tocado nunca un arduino y estoy algo perdido.

    Gracias y feliz año!!!

    ResponderEliminar
  2. Estas gastando el Arduino en el proyecto mejor busca un sistema operativo para arduino que se llama DUINOS y resolvera todos tus problemas.

    ResponderEliminar
    Respuestas
    1. jurr no lo conocía, es todo un nuevo ecosistema, a ver si me informo. Gracias por la información.

      Eliminar
  3. lo que puedes hacer es una aplicacion en PHP con varios botones o divisiones (DIV) alojada en la rsppi donde le pasas las variables por GET al pulsar el boton o DIV http://www.desarrolloweb.com/faq/511.php

    Cuando pulses el boton se llama asi mismo pasandole un parametro y te vuelve a mostrar la misma web.

    Por ejemplo: ipRSPPI/demonio.php?accion=1 (esto que sea subir)
    ipRSPPI/demonio.php?accion=2 (bajar)
    ipRSPPI/demonio.php?accion=3 (girar a la derecha)

    Para saber si le has pasado un variable en PHP por GET seria:

    if (isset($_GET['velocidad'])) {
    aqui llamas el .sh
    }

    Y cuando la web en PHP reciba el parametro desde PHP ejecutas un .sh que mande instrucciones a los motores.
    Tambien puedes enviar un 2º parametros que sea la velocidad de la accion (subir a lento, girar rapido....)

    Ejemplo:
    ipRSPPI/demonio.php?accion=3&velocidad=50

    Para recoger el valor de $_GET desde PHP seria:

    $accionRSPPI= $_GET['accion'];
    $velocidadRSPPI= $_GET['velocidad'];

    Para ejecutar sh desde PHP

    Para el path que tienes creado:
    shell_exec(../../../root/scripts/script.sh);

    ResponderEliminar
  4. aqui te dejo una demo de lo que te comentaba

    www.gsbrownsea.es/slideBar/

    ResponderEliminar
    Respuestas
    1. vaya ... eso es sin duda de mucha ayuda. Hazme un favor, cuando publique la primera versión de los controles de mi ardu-quad-raspbi-copter, échale un ojo a ver si se podría optimizar ;)

      Eliminar
  5. ok!

    yo me he pedido mi rsppi.... cuando me llegué lo probaré en ella.

    Si tienes alguna duda con PHP dimelo.

    Un saludo, Javi.

    ResponderEliminar
  6. Has visto esto??


    http://www.gamepadjs.com/

    ResponderEliminar
    Respuestas
    1. aqui tienes otro ejemplo

      https://github.com/kallaspriit/HTML5-JavaScript-Gamepad-Controller-Library

      Eliminar
    2. acabo de leer que los nuevos navegadores tienen una API para GAMEPAD

      http://www.html5rocks.com/en/tutorials/doodles/gamepad/?redirect_from_locale=es

      Eliminar
    3. tambien una manera facil es con un teclado en pantalla y segun la tecla que pulsas hace una accion

      http://www.desarrolloweb.com/articulos/eventos-teclado-jquery.html

      Eliminar
    4. bueno me he picado con este tema y ya tenga otra posible solución

      Según la tecla que pulses del teclado puedes ejecutar un sh

      http://gsbrownsea.es/slideBar/gamepad.html

      Eliminar
    5. y aqui v2 para forzar el teclado en pantalla en un movil

      http://gsbrownsea.es/slideBar/gamepad2.html

      Eliminar
    6. javi jaaaavi tranquilo que te vienes arriba ;) estan geniales esos enlaces. Gran parte de ellos me sirven pero que no se nos olvide que tiene que ejecutar continuamente scripts en el servidor sin refrescar la web en el navegador. Mañana pondre un post muy interesante sobre esto. Gracias por toda la informacion.

      Eliminar
    7. entiendo que con jquery ejecuta cada vez que pulsas una tecla sin refrescar ;)

      He puesto tantos comentarios porque no puedo editar el primero para ampliar informacion.

      Eliminar
    8. ya ya, mi primera prueba es en jquery, pero necesito que éste le hable al servidor donde se aloja (el raspberry).

      Por ahora no me cobran por los comentarios, así que siéntete libre de poner todos los que quieras ;)

      Eliminar
    9. Hola, soy experto en programacion, he pedido mi raspberry tambien, y investigando que puedo hacer con ella, me tope con tu blog, esta muy bien la verdad.

      Como llevas la comunicacion jquery y tu servidor?
      Aver, te comento un poco por encima como funciona el asunto, jquery es javascript, y javascript es un lenguaje del lado del cliente y php del lado del servidor, supongo que hasta ahi bien.
      Teoricamente, no se pueden comunicar javascript y php, a no ser que uses ajax. Ademas de ser mucho mas rapido que un refresco de web, es mucho mas limpio y trabaja php como segundo plano. Os pongo un pedazo de codigo de ajax con jquery:
      Y os voy esplicando linea a linea.

      $.ajax({ //Iniciamos la comunicacion ajax
      type: "POST", //metodo que usaremos para pasar datos
      url: 'servidor.php', //lugar donde se aloja nuestro codigo php
      data: "var=1", //variables que pasamos a nuestro php
      success: function (msg) { //lo hara si termina de leer el php

      }
      }
      });

      Yo se que tarda muy poco en enviar esto ajax, es mucho mas rapido que el html, pero sera lo suficientemente rapido como para que responda bien?

      Eliminar