Slide 1

Slide 1 text

Nodecopter

Slide 2

Slide 2 text

andrew

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

Felix Geisendörfer

Slide 5

Slide 5 text

AR Drone 2.0

Slide 6

Slide 6 text

HD Camera Downfacing camera Gyroscope Wifi 1GHz CPU Linux Accelerometer Magnetometer Ultrasound

Slide 7

Slide 7 text

ardrone2.parrot.com/developer-zone

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non- blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

Server-side Javascript Asynchronous Runs on v8 from Chrome Perfect for network programs

Slide 12

Slide 12 text

http://nodejs.org/download/ ! nodejs.org/download v0.10.29 $ node $ NPM install ar-drone

Slide 13

Slide 13 text

var arDrone = require('ar-drone');
 var client = arDrone.createClient();
 
 client.takeoff();
 
 client
 .after(3000, function() {
 this.up(1);
 })
 .after(2000, function() {
 this.stop()
 this.clockwise(1);
 })
 .after(3000, function() {
 this.stop();
 this.land();
 });

Slide 14

Slide 14 text

shama.github.com/voxel-drone

Slide 15

Slide 15 text

Demo Time

Slide 16

Slide 16 text

WARNING WARNING

Slide 17

Slide 17 text

QR CodeR

Slide 18

Slide 18 text

Dance Mat Drone

Slide 19

Slide 19 text

Kinect Drone

Slide 20

Slide 20 text

robot laser pong

Slide 21

Slide 21 text

matador-copter

Slide 22

Slide 22 text

$ telnet 192.168.1.1

Slide 23

Slide 23 text

# busybox | head BusyBox v1.14.0 () multi-call binary Copyright (C) 1998-2008 Erik Andersen, Rob Landley, Denys Vlasenko and others. Licensed under GPLv2. See source distribution for full notice. ! ! # cat /proc/version Linux version 2.6.32.9-g1dd1a2a (stephane@stephane-pc) (gcc version 4.5.1 (Sourcery G++ Lite 2010.09-50) ) #1 PREEMPT Thu May 30 19:21:53 CEST 2013 ! ! # uname -a Linux uclibc 2.6.32.9-g1dd1a2a #1 PREEMPT Thu May 30 19:21:53 CEST 2013 armv7l GNU/Linux ! # df -h Filesystem Size Used Available Use% Mounted on ubi1:system 26.3M 21.7M 3.3M 87% / tmp 57.7M 644.0K 57.1M 1% /tmp dev 57.7M 0 57.7M 0% /dev ubi0:factory 4.8M 76.0K 4.5M 2% /factory ubi2:update 13.2M 28.0K 12.5M 0% /update ubi2:data 53.5M 14.0M 36.8M 28% /data

Slide 24

Slide 24 text

$ ftp -u ftp://anonymous:anonymous@192.168.1.1/file file ! $ telnet 192.168.1.1 ! # ls /data/video ! # file ! ** bug in tar unpacking ** ! # ls /data/video/usb

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

# ls /data/video/usb ! ar-drone ! # cp -r /data/video/usb/ar-drone /data/video/

Slide 27

Slide 27 text

https://github.com/felixge/node-cross-compiler

Slide 28

Slide 28 text

# https://github.com/felixge/node-cross-compiler ! $ git clone git://github.com/felixge/node-cross-compiler.git $ cd node-cross-compiler $ ./helpers/ardrone2.sh

Slide 29

Slide 29 text

#!/bin/bash set -eu ! if [ ! -e build/bin/node ]; then echo "-> Spinning up VM" vagrant up echo "-> Building node binary" vagrant ssh -c "cd cross-compiler && ./setup-vm.sh && make ardrone2" echo "-> Halting VM" vagrant halt echo "-> To completely remove the VM, please execute 'vagrant destroy'" else echo "-> Skipping build (node binary exists)" fi ! echo "Would you like to install node on the drone? (Connect now) [Y/n]" read a if [[ $a == "Y" || $a == "y" || $a = "" ]]; then echo "-> Uploading binary" ftp -u ftp://anonymous:anonymous@192.168.1.1/node build/bin/node echo "-> Installing" { echo "cd /data/video && mv ./node /bin && chmod u+x /bin/node && rm -rf node && exit"; sleep 1; } | telnet 192.168.1.1 echo "-> Installation completed!" else echo "-> Build completed!" fi

Slide 30

Slide 30 text

var arDrone = require('..'); var http = require('http'); ! var client = arDrone.createClient(); client.disableEmergency(); ! navData = {} ! client.on('navdata', function(data){ navData = data; }); ! var server = http.createServer(function(req, res) { res.writeHead(200, {'Content-Type': 'application/json'}); res.end(JSON.stringify(navData)); }); ! server.listen(8080, function() { console.log('started server on http://192.168.1.1:8080') });

Slide 31

Slide 31 text

var arDrone = require('..'); var http = require('http'); ! var client = arDrone.createClient(); client.disableEmergency(); ! navData = {} ! client.on('navdata', function(data){ navData = data; }); ! var server = http.createServer(function(req, res) { res.writeHead(200, {'Content-Type': 'application/json'}); res.end(JSON.stringify(navData)); }); ! server.listen(8080, function() { console.log('Serving latest png on port 8080 ...'); client.takeoff(); ! client .after(5000, function() { this.clockwise(0.5); }) .after(5000, function() { this.stop(); }) .after(1000, function() { this.stop(); this.land(); }); console.log('started server on http://192.168.1.1:8080') });

Slide 32

Slide 32 text

https://gist.github.com/maxogden/4152815

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

virus-copter github.com/substack/virus-copter

Slide 35

Slide 35 text

No content

Slide 36

Slide 36 text

CoderDojo

Slide 37

Slide 37 text

No content

Slide 38

Slide 38 text

No content

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

No content

Slide 41

Slide 41 text

No content

Slide 42

Slide 42 text

nodecopter.com

Slide 43

Slide 43 text

robotsconf.com December 6-7 2014 Florida

Slide 44

Slide 44 text

Thank You @teabass

Slide 45

Slide 45 text

Thank You @teabass