This site uses cookies own and third. If you continue to browse consider to accept the use of cookies. OK More Info.

Pilotear AR-Drone 2.0 con NodeJS

  • 0 Replies
  • 3576 Views

0 Members and 1 Guest are viewing this topic.

Offline skollprog

  • *
  • Underc0der
  • Posts: 4
  • Actividad:
    0%
  • Reputación 1
    • View Profile

Pilotear AR-Drone 2.0 con NodeJS

  • on: December 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.

Code: You are not allowed to view links. Register or Login
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.

Code: (dos) You are not allowed to view links. Register or Login
> 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.

Code: (javascript) You are not allowed to view links. Register or Login
var arDrone = require('ar-drone');
var client  = arDrone.createClient();

client.disableEmergency();

status = "on";
camera = "frontal";
sens   = 0.6;

console.log("\033c");
console.log("\n[!] Ar-Drone connected.\n");

const readline = require('readline');
readline.emitKeypressEvents(process.stdin);
process.stdin.setRawMode(true);
process.stdin.on('keypress', (str, key) => {

kn = key.name;

if (kn === "escape") {
status = "off";
client.stop();
client.land();
console.log("\n\n[!] Disconnected.");
process.exit();
} else {

if (kn === "return") {
client.takeoff();
process.stdout.write(" --takeoff ");
}

if (kn === "backspace") {
client.stop();
client.land();
process.stdout.write(" --land ");
}

if (kn === "delete") {
client.stop();
process.stdout.write(" --kswitch ");
}

if (kn === "tab") {
if (camera == "frontal") {
client.config("video:video_channel", 3);
camera = "bottom";
process.stdout.write(" --cam:1 ");
} else if (camera == "bottom") {
client.config("video:video_channel", 0);
camera = "frontal";
process.stdout.write(" --cam:2 ");
}
}

if (kn === "1") {
sens = 0.2;
process.stdout.write(" --sens:1 ");
} else if (kn === "2") {
sens = 0.4;
process.stdout.write(" --sens:2 ");
} else if (kn === "3") {
sens = 0.6;
process.stdout.write(" --sens:3 ");
} else if (kn === "4") {
sens = 0.8;
process.stdout.write(" --sens:4 ");
} else if (kn === "5") {
sens = 1.0;
process.stdout.write(" --sens:5 ");
}

if (status == "on")
{
if (kn === "w") {
client.up(sens)
process.stdout.write(" +z ");
} else if (kn === "s") {
client.down(sens)
last = "s";
process.stdout.write(" -z ");
} else if (kn === "up") {
client.front(sens)
process.stdout.write(" +y ");
} else if (kn === "down") {
client.back(sens)
process.stdout.write(" -y ");
} else if (!key.shift && kn === "right") {
client.right(sens)
process.stdout.write(" +x ");
} else if (!key.shift && kn === "left") {
client.left(sens)
process.stdout.write(" -x ");
} else if (key.shift && kn === "right") {
client.clockwise(-sens);
process.stdout.write(" +r ");
} else if (key.shift && kn === "left") {
client.clockwise(sens);
process.stdout.write(" -r ");
}
}
}

});

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:

Code: (bash) You are not allowed to view links. Register or Login
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...

Code: (dos) You are not allowed to view links. Register or Login
Escape: Aterrizar y desconectar.
Delete: Killswitch.
Enter: Despegar.
Backspace: Aterrizar.
Up: Hacia adelante.
Down: Hacia atrás.
Left: Hacia la izquierda.
Rgiht: Hacia la derecha.
Shift + Left: Rotar hacia la izquierda.
Shift + Right: Rotar hacia la derecha.
W: Elevar.
S: Descender.
Tab: Cámara frontal / trasera.
1 / 2 / 3 / 4 / 5: Sensibilidad de movimiento.

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

Code: (dos) You are not allowed to view links. Register or Login
[!] Ar-Drone connected.

 +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

[!] Disconnected.

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

Saludos!
« Last Edit: December 27, 2017, 02:09:49 pm by skollprog »