Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Pilotear AR-Drone 2.0 con NodeJS

  • 0 Respuestas
  • 2640 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado skollprog

  • *
  • Underc0der
  • Mensajes: 4
  • Actividad:
    0%
  • Reputación 1
    • Ver Perfil
« en: Diciembre 27, 2017, 03:03:52 am »
Tengo un drone ahí en una esquina de mi cuarto
casi sin usar dado que es molesto usarlo con
las MobileApps
ya que me consume mucha batería,
el manejo es anti-intuitivo y demás.

Así que decidí experimentar y ver cómo podía usarlo
desde la Notebook. Investigando en varios lugares
(sin mucha info al respecto), descubrí que se podía
utilizar la librería "ar-drone" de NodeJS.

Me puse a hacer un poco de scripting para ver
qué me salía. Cuestión... ahora tan sólo debo
manejar el drone desde la consola de comandos.

Cómo se hace?

Primero que nada, hay que asegurarse de tener
instalado NodeJS y NPM. En caso de no ser así,
les dejo esta URL, de donde pueden descargarlo
para el SO que tengan uds.

Código: [Seleccionar]
https://nodejs.org/es/download/
Si ya está instalado, abrimos la consola de comandos
(o la terminal, si es que están usando linux),
e instalamos el paquete antes mencionado.

Código: DOS
  1. > npm install ar-drone

Una vez lo hayan instalado (no se preocupen si
tira tags amarillos con la palabra "WARN"),
abrimos SublimeText, Atom, Brackets
o cualquiera fuese el editor de texto que suelan usar
y escribimos el siguiente código:

Atención: El código está hecho a mi manera...
por lo que cada uno puede mejorar y cambiar lo
que le parezca necesario.


Modificación 12/27/2017: Código simplificado y más teclas agregadas.

Código: Javascript
  1. var arDrone = require('ar-drone');
  2. var client  = arDrone.createClient();
  3.  
  4. client.disableEmergency();
  5.  
  6. status = "on";
  7. camera = "frontal";
  8. sens   = 0.6;
  9.  
  10. console.log("\033c");
  11. console.log("\n[!] Ar-Drone connected.\n");
  12.  
  13. const readline = require('readline');
  14. readline.emitKeypressEvents(process.stdin);
  15. process.stdin.setRawMode(true);
  16. process.stdin.on('keypress', (str, key) => {
  17.  
  18.         kn = key.name;
  19.  
  20.         if (kn === "escape") {
  21.                 status = "off";
  22.                 client.stop();
  23.                 client.land();
  24.                 console.log("\n\n[!] Disconnected.");
  25.                 process.exit();
  26.         } else {
  27.  
  28.                 if (kn === "return") {
  29.                         client.takeoff();
  30.                         process.stdout.write(" --takeoff ");
  31.                 }
  32.  
  33.                 if (kn === "backspace") {
  34.                         client.stop();
  35.                         client.land();
  36.                         process.stdout.write(" --land ");
  37.                 }
  38.  
  39.                 if (kn === "delete") {
  40.                         client.stop();
  41.                         process.stdout.write(" --kswitch ");
  42.                 }
  43.  
  44.                 if (kn === "tab") {
  45.                         if (camera == "frontal") {
  46.                                 client.config("video:video_channel", 3);
  47.                                 camera = "bottom";
  48.                                 process.stdout.write(" --cam:1 ");
  49.                         } else if (camera == "bottom") {
  50.                                 client.config("video:video_channel", 0);
  51.                                 camera = "frontal";
  52.                                 process.stdout.write(" --cam:2 ");
  53.                         }
  54.                 }
  55.  
  56.                 if (kn === "1") {
  57.                         sens = 0.2;
  58.                         process.stdout.write(" --sens:1 ");
  59.                 } else if (kn === "2") {
  60.                         sens = 0.4;
  61.                         process.stdout.write(" --sens:2 ");
  62.                 } else if (kn === "3") {
  63.                         sens = 0.6;
  64.                         process.stdout.write(" --sens:3 ");
  65.                 } else if (kn === "4") {
  66.                         sens = 0.8;
  67.                         process.stdout.write(" --sens:4 ");
  68.                 } else if (kn === "5") {
  69.                         sens = 1.0;
  70.                         process.stdout.write(" --sens:5 ");
  71.                 }
  72.  
  73.                 if (status == "on")
  74.                 {
  75.                         if (kn === "w") {
  76.                                 client.up(sens)
  77.                                 process.stdout.write(" +z ");
  78.                         } else if (kn === "s") {
  79.                                 client.down(sens)
  80.                                 last = "s";
  81.                                 process.stdout.write(" -z ");
  82.                         } else if (kn === "up") {
  83.                                 client.front(sens)
  84.                                 process.stdout.write(" +y ");
  85.                         } else if (kn === "down") {
  86.                                 client.back(sens)
  87.                                 process.stdout.write(" -y ");
  88.                         } else if (!key.shift && kn === "right") {
  89.                                 client.right(sens)
  90.                                 process.stdout.write(" +x ");
  91.                         } else if (!key.shift && kn === "left") {
  92.                                 client.left(sens)
  93.                                 process.stdout.write(" -x ");
  94.                         } else if (key.shift && kn === "right") {
  95.                                 client.clockwise(-sens);
  96.                                 process.stdout.write(" +r ");
  97.                         } else if (key.shift && kn === "left") {
  98.                                 client.clockwise(sens);
  99.                                 process.stdout.write(" -r ");
  100.                         }
  101.                 }
  102.         }
  103.  
  104. });

A continuación, simplemente guardan este archivo
con el nombre que quieran, y en formato "js".
(Como ejemplo, voy a usar el nombre "ar-drone.js".)

Bien, suponiendo que tienen tarjeta WiFi o USB WiFi,
hay que conectarse al Drone (van a perder la conexión
a internet).

Ahora, en la consola de comandos o en terminal, tipeamos
lo siguiente:

Código: Bash
  1. node ar-drone.js

Y automáticamente se creará un enlace entre la Notebook,
PC, o similar y el Drone.

Cómo manejamos el Drone?

De la manera en que está programado el script
(que seguramente copiaron y pegaron), van a poder
usar las teclas (si se las ingenian, pueden usar sus
propios comandos, pero se les va a complicar un poco
para manejarlo).

Aquí la lista de controles...

Código: DOS
  1. Escape: Aterrizar y desconectar.
  2. Delete: Killswitch.
  3. Enter: Despegar.
  4. Backspace: Aterrizar.
  5. Up: Hacia adelante.
  6. Down: Hacia atrás.
  7. Left: Hacia la izquierda.
  8. Rgiht: Hacia la derecha.
  9. Shift + Left: Rotar hacia la izquierda.
  10. Shift + Right: Rotar hacia la derecha.
  11. W: Elevar.
  12. S: Descender.
  13. Tab: Cámara frontal / trasera.
  14. 1 / 2 / 3 / 4 / 5: Sensibilidad de movimiento.
  15.  

Un ejemplo cómo se vería la consola de comandos
mientras piloteamos el Drone, sería el siguiente...

Código: DOS
  1. [!] Ar-Drone connected.
  2.  
  3.  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +x  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  -z  -z  -z  -z  -z  -z  -z  -z  -z  -z  -z  -z  -z  -z  -z  -z  -x  -x  -x  -x  -x  -x  -x  -x  -x  -x  -x  -x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  --land
  4.  
  5. [!] Disconnected.

Espero que les sea útil, y si de casualidad
alguien tiene alguna información extra que
sirva, el comentario será bienvenido entonces.

Saludos!
« Última modificación: Diciembre 27, 2017, 02:09:49 pm por skollprog »

 

¿Te gustó el post? COMPARTILO!



Nodejs Malware Server

Iniciado por tha_username

Respuestas: 0
Vistas: 2498
Último mensaje Marzo 02, 2018, 07:22:02 pm
por tha_username