SlideShare una empresa de Scribd logo
1 de 82
Lego vs Ruzzle




Alberto Sarullo       http://albertosarullo.com
Sommario

• Chi sono         • Problemi affrontati
                      –   Simulare dita
• L’idea              –   Prototipo
                      –   Absoltue position regulation
                      –   Robot #1
• Ingredienti         –   Robot #2
   – Ruzzle           –   Video
   – NodeJS
   – Mindstorm
Alberto Sarullo
• Developer, Technical Director, Teacher
• Technical Leader @ NTTData

• Caratteristiche: curioso, creativo, introverso
• Hobby: dev, bike, kite, lego

• Contact:
  – alberto.sarullo@gmail.com
  – twitter.com/albertosarullo
Curiosità: sin da piccolo ho sempre amato
smontare cose per capirne
il funzionamento




                                        Photo: Shutterstock
8 anni: primo
ambito titolo
di studio
Inizia la stagione dei disastri: montare è più difficile di smontare
La scoperta
dell’elettricità

Provando con una
batteria da 9V a
caricarne una da
orologio, mi è
esplosa in faccia
Ultimi danni:
appena assunto
   ho divelto le
    porte di un
     ascensore

       Da allora mi
         chiamano
 “Il Distruggitore”
Bici +
        Informatica =
www.pisteciclabili.com
Foto by Massimo: www.flickr.com/photos/autunnodicoloriaquilonistimilano
Spazzino@Frontiers of interaction IV


“Alberto Sarullo's open-source
Lego mashup sensor robot
was the darling
of the event” (Bruce Sterling)

“Qui l’indicatore di geekdom è
andato proprio fuori scala.
Spazzino è uno Spime montato su
un Lego Mindstorm hackato con
componenti non standard. Kudos
ad Alberto Sarullo.” (Digital
Meadows Blog)


#Minstorm #SunSpot #Solar #Python
#Twitter #Bluetooth


http://spazzino.com
Porta iPad / Tablet realizzato
per accelerare il test
dell’applicazione per bambini
Timbuktu

Orientation: Landscape &
Portrait
L’idea
Una notte, mentre la mia ragazza a cui
piacciono i ricci vagava per casa
rapita da ruzzle...
Ruzzle
Regole del gioco
              Porta iPad
        Griglia di 4x4 lettere

        Ogni lettera ha un punteggio
        Ogni lettera può avere un
        modificatore di punti (3L, 2W)

        Scopo: usare lettere adiacenti
        per trovare parole sulla griglia

        La parole possono essere
        orientate in
        orizzontale, verticale e
        diagonale e possono seguire
        linee spezzate
Una partita è costituita da
3 round e combattuta da 2
avversari

Ogni round dura 2 minuti

Vince la partita chi fa più
punti
NodeJS
NodeJS
“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.”

• http://www.slideshare.net/the_undefined/nodejs-a-quick-tour
• http://www.slideshare.net/simon/evented-io-based-web-servers-
  explained-using-bunnies
• http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/
Javascript
var http = require('http');
http.createServer(function handleRequest(req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello Worldn');
).listen(1337, '127.0.0.1');

console.log('Hello Codemotion! http://127.0.0.1:1337/');

% node example.js
Hello Codemotion! http://127.0.0.1:1337/
Linkedin & NodeJS
Linkedin: some of the advantages of Node.js over Rails:
• Much better performance and lower memory overhead than
  other tested options, running up to 20x faster in some
  scenarios
• Programmers could leverage their JavaScript skills
• Frontend and backend mobile teams could be combined into
  a single unit
• Servers were cut to 3 from 30. Enough headroom remains to
  handle 10x current levels of resource utilization

http://highscalability.com/blog/2012/10/4/linkedin-moved-from-rails-to-node-27-
servers-cut-and-up-to-2.html
Perché NodeJS?
•   Conoscevo la tecnologia
•   Veloce
•   Semplice da implementare
•   Npm – Node Packet Manager
•   Se anche non fossi riuscito a costruire
    il robot, avrei potuto pubblicare il
    codice: chiunque avrebbe potuto
    eseguirlo sul suo browser
Ruzzle Solver
NodeJS Ruzzle Solver

  • Dizionario                     •   wordList = []
  • Lettere sulla griglia          •   Ruzzle.letters = []
  • Pulitura del dizionario        •   Ruzze.clearWords(wordList)
  • Ricerca parole                 •   Ruzzle.search(…)
  • Ordinamento parole per
    punti e per minimizzare i      • sortMoves(moves)
    path                           • sendViaBluetooth(moves)
  • Invio via bluetooth

http://github.com/albertosarullo/ruzzle-mindstorm-nxc-nodejs-solver
Mindstorm
Lego Mindstorm


•   NXT
•   Motori (solo 3)
•   Sensori
•   Ambienti di sviluppo
NXT
 • RAM: 64KB
 • 32-bit ARM7, 8-bit Atmel AVR
   ATmega48
 • Display: 100×60 pixel
   monochrome
 • Four buttons
 • USB, Bluetooth
 • Speaker (max 8khz)
 • Power: 6 AA batteries / Li-Ion
   rechargeable battery
Motori
Sensori
Ufficiali:                   Aftermarket:
• Touch                           –   Bussola,
• Light                           –   Giroscopio
                                  –   Accelerometri
• Color
                                  –   Camera
• Sound volume                    –   Flessione
• Ultrasonic                      –   Pressione
                                  –   Termometro
                                  –   Multiplexer
                 Mindsensors, Hitechnic, Dexter industries
Esempio #1:
multiplexer per controllare 4 servomotori da modellismo
Esempio #2:
camera che
segue la luce
Dev Environments
– NXT-G (gui)                –   NXT-Python
– BricxCC, Next Byte Codes   –   Lua
  (assemby), Not eXactly C   –   Ada
  (C-like language)          –   MATLAB and Simulink
– C# with Microsoft          –   URBI
  Robotics Developer
  Studio                     –   FLL NXT Navigation
– leJOS NXJ                  –   ruby-nxt
– Robolab                    –   Robotics.NXT
– RoboMind                   –   LibNXT
– ROBOTC                     –   PyNXC
– NXTGCC                     –   Physical Etoysz
NXT-G
Not eXactly C

sub makeTestPlan() {
  string complete = "600303303007";
    // complete = "6332211007601117";

    completeLength = StrLen(complete);
    ArrayInit(moves, 0, completeLength);

    for (int i = 0; i < completeLength; i++) {
       moves[i] = StrToNum( SubStr(complete, i, 1));
    }
}
Via!
Problemi da affrontare
• Scrivere un solver per Ruzzle
• Costruire un robot
• Scrivere il software per muovere il robot
• Far comunicare il robot con il computer
• Fare interagire il robot con il tablet (interazione
  macchina-macchina)
• Prelevare l’immagine dal tablet
• Riconoscere le lettere
Simulare un dito
Schermi capacitivi
3 Strati:
    – conduttore trasparente (ossido metallico)
    – isolante (vetro)
    – matrice di condensatori a film


Funzionamento:
• Agli angoli dello schermo viene applicata una tensione elettrica
• Quando il dito tocca lo schermo avviene una variazione di capacità
  superficiale, che viene letta dalla matrice di condensatori


Samsung's Super AMOLED: 'in-cell' technology, elimina uno strato
integrandolo nel display stesso
Idea #1: il Wüsterone
Idea #2: Yubitsume (指詰め)
Fuochino: Spugna conduttiva
Fuoco: Spugna vegetale (1€)




   http://www.youtube.com/watch?v=tnMcalzBcKk
Il Robot
I robot nella fantascienza
Robot
I robot nella realtà




      http://www.youtube.com/watch?v=sjAZGUcjrP8


Nelle industrie moderne sono gli umani ad esser rari
I robot nella realtà




www.youtube.com/watch?v=sjAZGUcjrP8


 Se i robot fossero una specie, diremmo che stanno conquistando il mondo
Prototipo
Prototipo
• Scopo:
  – verificare la fattibilità della costruzione di un robot
    che si muovesse con precisione su 3 assi


• Strategia:
  – progettazione modulare per quanto riguarda i
    movimenti sugli assi x e y, per distribuire
    uniformemente il peso
  – asse z: procedere per tentativi
Prototipo
• Risultato sperimentazione:
  – Ok, funziona

  – Riesco a muovere sui 3 assi: x, y, z

  – Strane imprecisioni nelle traiettorie, che imputavo
    ad un peso eccessivo o non equilibrato. Ma io
    voglio la migliore precisione possibile: cerco la
    causa e l’ispirazione.
Bisogna sempre puntare in alto: ho cercato
   i video dei più precisi robot industriali




      http://www.youtube.com/watch?v=SOESSCXGhFo
Prototipo
Il problema:
• non era nel mio software
• non era nella mia costruzione
• era nel firmware lego originale

I motori lego si fermano dopo aver raggiunto la
meta, non prima!
Absolute Position Regulation

“NXT Improved Firmware, that controls one motor so that its
position matches the position set by the user.

At any time, even when the motor is moving, the set position can
be changed, and the control algorithm will move the motor
towards the new position.”

http://nxt-firmware.ni.fr.eu.org/changes/absolute_position_regulation/
Absolute motor regulation
Robot #1
Robot #1
• Scopo:
  – unire tutto ciò che è stato fatto


• Strategia:
  – costruzione modulare per quanto riguarda i
    movimenti sugli assi x e y
  – distribuzione dei pesi equilibrata
Robot #1
Idea: scattare una fotografia all’iPad dalla webcam del
portatile e processarla

Problema: il “dito” avrebbe avuto diventare un braccio
per non coprire il tablet

Soluzione: metafora della scavatrice
Volevo una scavatrice…
..ma non una qualsiasi!




http://www.youtube.com/watch?v=jH1cR2spwNs
Robot #1

Problema:
   costruire un robot grande

Soluzione:
    se la montagna non viene a Maometto…
Ho aggiunto un
    riferimento
        all’unica
   dimensione
 assoluta che il
nostro cervello
       possiede.




        Con un
semplice omino
         la mia
   scavatrice è
      diventata
      immensa
Tipico laboratorio di ricerca
Problema
Problema insormontabile: poca rigidità torsionale causa
imprecisione di circa 3 mm nelle traiettorie diagonali

Soluzione: distruggere tutto ciò che avevo costruito

Smarrimento: serve un cambio radicale di paradigma
Robot #2
Cambio di metafora: da
scavatrice a gru a ponte
Robot #2
Risultato: funziona! (errore max: circa 2mm)

E ora? Che faccio? Va comunicato

Come? Con un video su Youtube!

Idea: L’omino lego, da strumento diventa protagonista di una
storia

http://youtu.be/ukPyJPFAwlo
http://youtu.be/ukPyJPFAwlo
Sviluppi futuri
•   Leggere i modificatori di punti (2L, 3W)
•   RaspberryPi integration (via bluetooth)
•   Sikuli.org environment
•   Automazione totale
•   Trasferire la sfida a ruzzle al mondo delle macchine
•   Idee?
Grazie
• Codemotion Staff
• Silvana
• Open source projects
  – Tesseract
  – ImageMagick
  – Absolute position
    regulation
  – Node Mindstorm
    Bluetooth
Feedback
Qualsiasi feedback è
prezioso!

•   alberto.sarullo@gmail.com
•   twitter.com/albertosarullo
•   fb.com/albertosarullo
•   linkedin.com/in/albertosarullo
•   github.com/albertosarullo

N.B. Senza feedback non c’è
miglioramento

Más contenido relacionado

Similar a Lego vs Ruzzle @ codemotion 2013

Jug Roma - Wii Remote
Jug Roma - Wii RemoteJug Roma - Wii Remote
Jug Roma - Wii Remotedecabyte
 
Mr.Robot - How To Make a Robot !
Mr.Robot - How To Make a Robot !Mr.Robot - How To Make a Robot !
Mr.Robot - How To Make a Robot !Gianfranco Pulitano
 
ios 8 - parte 1 - intro - ita
ios 8 - parte 1 - intro - itaios 8 - parte 1 - intro - ita
ios 8 - parte 1 - intro - itaDario Rusignuolo
 
Industrial iot: dalle parole ai fatti
Industrial iot: dalle parole ai fatti Industrial iot: dalle parole ai fatti
Industrial iot: dalle parole ai fatti Riccardo Zamana
 
Industrial Iot - IotSaturday
Industrial Iot - IotSaturday Industrial Iot - IotSaturday
Industrial Iot - IotSaturday Riccardo Zamana
 
Gam01 introduzione a kinect
Gam01   introduzione a kinectGam01   introduzione a kinect
Gam01 introduzione a kinectDotNetCampus
 
Gam04 introduzione a-netduino_final
Gam04   introduzione a-netduino_finalGam04   introduzione a-netduino_final
Gam04 introduzione a-netduino_finalDotNetCampus
 
DotNetCampus 2014 - Introduzione a Kinect
DotNetCampus 2014 - Introduzione a KinectDotNetCampus 2014 - Introduzione a Kinect
DotNetCampus 2014 - Introduzione a KinectMassimo Bonanni
 
Extended Summary of “Co-Learning of Task and Sensor Placement for Soft Robotics”
Extended Summary of “Co-Learning of Task and Sensor Placement for Soft Robotics”Extended Summary of “Co-Learning of Task and Sensor Placement for Soft Robotics”
Extended Summary of “Co-Learning of Task and Sensor Placement for Soft Robotics”RiccardoWeis
 
Node js dev day napoli 2016
Node js dev day napoli 2016Node js dev day napoli 2016
Node js dev day napoli 2016Michele Nasti
 
Tecnologie per la mente mind toole robotica
Tecnologie per la mente mind toole   roboticaTecnologie per la mente mind toole   robotica
Tecnologie per la mente mind toole roboticapitagoraclasse20
 
Tecnologie per la mente mind tools Robotica
Tecnologie per la mente mind tools  RoboticaTecnologie per la mente mind tools  Robotica
Tecnologie per la mente mind tools Roboticapitagoraclasse20
 
Tecnologie per la mente mind tools - robotica
Tecnologie per la mente mind tools - roboticaTecnologie per la mente mind tools - robotica
Tecnologie per la mente mind tools - roboticapitagoraclasse20
 
Alice in WordPressLand - "We're all mad here"
Alice in WordPressLand - "We're all mad here"Alice in WordPressLand - "We're all mad here"
Alice in WordPressLand - "We're all mad here"Nicola Costantino
 
Cocos2d: creare videogiochi con facilità!
Cocos2d: creare videogiochi con facilità!Cocos2d: creare videogiochi con facilità!
Cocos2d: creare videogiochi con facilità!Maurizio Moriconi
 
Object printing for dummies [veneziacamp format]
Object printing for dummies [veneziacamp format]Object printing for dummies [veneziacamp format]
Object printing for dummies [veneziacamp format]Leo Sorge
 
Kinect and brave new applications
Kinect and brave new applicationsKinect and brave new applications
Kinect and brave new applicationsIgor Antonacci
 
Programmazione degli ATTiny - Il computer nella scarpa
Programmazione degli ATTiny - Il computer nella scarpaProgrammazione degli ATTiny - Il computer nella scarpa
Programmazione degli ATTiny - Il computer nella scarpaPaolo Aliverti
 

Similar a Lego vs Ruzzle @ codemotion 2013 (20)

Jug Roma - Wii Remote
Jug Roma - Wii RemoteJug Roma - Wii Remote
Jug Roma - Wii Remote
 
Sviluppare applicazioni Domino Web per dispositivi Mobili
Sviluppare applicazioni Domino Web per dispositivi MobiliSviluppare applicazioni Domino Web per dispositivi Mobili
Sviluppare applicazioni Domino Web per dispositivi Mobili
 
Mr.Robot - How To Make a Robot !
Mr.Robot - How To Make a Robot !Mr.Robot - How To Make a Robot !
Mr.Robot - How To Make a Robot !
 
ios 8 - parte 1 - intro - ita
ios 8 - parte 1 - intro - itaios 8 - parte 1 - intro - ita
ios 8 - parte 1 - intro - ita
 
J huery
J hueryJ huery
J huery
 
Industrial iot: dalle parole ai fatti
Industrial iot: dalle parole ai fatti Industrial iot: dalle parole ai fatti
Industrial iot: dalle parole ai fatti
 
Industrial Iot - IotSaturday
Industrial Iot - IotSaturday Industrial Iot - IotSaturday
Industrial Iot - IotSaturday
 
Gam01 introduzione a kinect
Gam01   introduzione a kinectGam01   introduzione a kinect
Gam01 introduzione a kinect
 
Gam04 introduzione a-netduino_final
Gam04   introduzione a-netduino_finalGam04   introduzione a-netduino_final
Gam04 introduzione a-netduino_final
 
DotNetCampus 2014 - Introduzione a Kinect
DotNetCampus 2014 - Introduzione a KinectDotNetCampus 2014 - Introduzione a Kinect
DotNetCampus 2014 - Introduzione a Kinect
 
Extended Summary of “Co-Learning of Task and Sensor Placement for Soft Robotics”
Extended Summary of “Co-Learning of Task and Sensor Placement for Soft Robotics”Extended Summary of “Co-Learning of Task and Sensor Placement for Soft Robotics”
Extended Summary of “Co-Learning of Task and Sensor Placement for Soft Robotics”
 
Node js dev day napoli 2016
Node js dev day napoli 2016Node js dev day napoli 2016
Node js dev day napoli 2016
 
Tecnologie per la mente mind toole robotica
Tecnologie per la mente mind toole   roboticaTecnologie per la mente mind toole   robotica
Tecnologie per la mente mind toole robotica
 
Tecnologie per la mente mind tools Robotica
Tecnologie per la mente mind tools  RoboticaTecnologie per la mente mind tools  Robotica
Tecnologie per la mente mind tools Robotica
 
Tecnologie per la mente mind tools - robotica
Tecnologie per la mente mind tools - roboticaTecnologie per la mente mind tools - robotica
Tecnologie per la mente mind tools - robotica
 
Alice in WordPressLand - "We're all mad here"
Alice in WordPressLand - "We're all mad here"Alice in WordPressLand - "We're all mad here"
Alice in WordPressLand - "We're all mad here"
 
Cocos2d: creare videogiochi con facilità!
Cocos2d: creare videogiochi con facilità!Cocos2d: creare videogiochi con facilità!
Cocos2d: creare videogiochi con facilità!
 
Object printing for dummies [veneziacamp format]
Object printing for dummies [veneziacamp format]Object printing for dummies [veneziacamp format]
Object printing for dummies [veneziacamp format]
 
Kinect and brave new applications
Kinect and brave new applicationsKinect and brave new applications
Kinect and brave new applications
 
Programmazione degli ATTiny - Il computer nella scarpa
Programmazione degli ATTiny - Il computer nella scarpaProgrammazione degli ATTiny - Il computer nella scarpa
Programmazione degli ATTiny - Il computer nella scarpa
 

Lego vs Ruzzle @ codemotion 2013

  • 1. Lego vs Ruzzle Alberto Sarullo http://albertosarullo.com
  • 2. Sommario • Chi sono • Problemi affrontati – Simulare dita • L’idea – Prototipo – Absoltue position regulation – Robot #1 • Ingredienti – Robot #2 – Ruzzle – Video – NodeJS – Mindstorm
  • 3. Alberto Sarullo • Developer, Technical Director, Teacher • Technical Leader @ NTTData • Caratteristiche: curioso, creativo, introverso • Hobby: dev, bike, kite, lego • Contact: – alberto.sarullo@gmail.com – twitter.com/albertosarullo
  • 4. Curiosità: sin da piccolo ho sempre amato smontare cose per capirne il funzionamento Photo: Shutterstock
  • 5.
  • 6. 8 anni: primo ambito titolo di studio
  • 7. Inizia la stagione dei disastri: montare è più difficile di smontare
  • 8. La scoperta dell’elettricità Provando con una batteria da 9V a caricarne una da orologio, mi è esplosa in faccia
  • 9. Ultimi danni: appena assunto ho divelto le porte di un ascensore Da allora mi chiamano “Il Distruggitore”
  • 10. Bici + Informatica = www.pisteciclabili.com
  • 11. Foto by Massimo: www.flickr.com/photos/autunnodicoloriaquilonistimilano
  • 12. Spazzino@Frontiers of interaction IV “Alberto Sarullo's open-source Lego mashup sensor robot was the darling of the event” (Bruce Sterling) “Qui l’indicatore di geekdom è andato proprio fuori scala. Spazzino è uno Spime montato su un Lego Mindstorm hackato con componenti non standard. Kudos ad Alberto Sarullo.” (Digital Meadows Blog) #Minstorm #SunSpot #Solar #Python #Twitter #Bluetooth http://spazzino.com
  • 13. Porta iPad / Tablet realizzato per accelerare il test dell’applicazione per bambini Timbuktu Orientation: Landscape & Portrait
  • 15. Una notte, mentre la mia ragazza a cui piacciono i ricci vagava per casa rapita da ruzzle...
  • 16.
  • 18. Regole del gioco Porta iPad Griglia di 4x4 lettere Ogni lettera ha un punteggio Ogni lettera può avere un modificatore di punti (3L, 2W) Scopo: usare lettere adiacenti per trovare parole sulla griglia La parole possono essere orientate in orizzontale, verticale e diagonale e possono seguire linee spezzate
  • 19. Una partita è costituita da 3 round e combattuta da 2 avversari Ogni round dura 2 minuti Vince la partita chi fa più punti
  • 21. NodeJS “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.” • http://www.slideshare.net/the_undefined/nodejs-a-quick-tour • http://www.slideshare.net/simon/evented-io-based-web-servers- explained-using-bunnies • http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/
  • 22. Javascript var http = require('http'); http.createServer(function handleRequest(req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello Worldn'); ).listen(1337, '127.0.0.1'); console.log('Hello Codemotion! http://127.0.0.1:1337/'); % node example.js Hello Codemotion! http://127.0.0.1:1337/
  • 23. Linkedin & NodeJS Linkedin: some of the advantages of Node.js over Rails: • Much better performance and lower memory overhead than other tested options, running up to 20x faster in some scenarios • Programmers could leverage their JavaScript skills • Frontend and backend mobile teams could be combined into a single unit • Servers were cut to 3 from 30. Enough headroom remains to handle 10x current levels of resource utilization http://highscalability.com/blog/2012/10/4/linkedin-moved-from-rails-to-node-27- servers-cut-and-up-to-2.html
  • 24. Perché NodeJS? • Conoscevo la tecnologia • Veloce • Semplice da implementare • Npm – Node Packet Manager • Se anche non fossi riuscito a costruire il robot, avrei potuto pubblicare il codice: chiunque avrebbe potuto eseguirlo sul suo browser
  • 25.
  • 27.
  • 28. NodeJS Ruzzle Solver • Dizionario • wordList = [] • Lettere sulla griglia • Ruzzle.letters = [] • Pulitura del dizionario • Ruzze.clearWords(wordList) • Ricerca parole • Ruzzle.search(…) • Ordinamento parole per punti e per minimizzare i • sortMoves(moves) path • sendViaBluetooth(moves) • Invio via bluetooth http://github.com/albertosarullo/ruzzle-mindstorm-nxc-nodejs-solver
  • 30. Lego Mindstorm • NXT • Motori (solo 3) • Sensori • Ambienti di sviluppo
  • 31. NXT • RAM: 64KB • 32-bit ARM7, 8-bit Atmel AVR ATmega48 • Display: 100×60 pixel monochrome • Four buttons • USB, Bluetooth • Speaker (max 8khz) • Power: 6 AA batteries / Li-Ion rechargeable battery
  • 33. Sensori Ufficiali: Aftermarket: • Touch – Bussola, • Light – Giroscopio – Accelerometri • Color – Camera • Sound volume – Flessione • Ultrasonic – Pressione – Termometro – Multiplexer Mindsensors, Hitechnic, Dexter industries
  • 34. Esempio #1: multiplexer per controllare 4 servomotori da modellismo
  • 36. Dev Environments – NXT-G (gui) – NXT-Python – BricxCC, Next Byte Codes – Lua (assemby), Not eXactly C – Ada (C-like language) – MATLAB and Simulink – C# with Microsoft – URBI Robotics Developer Studio – FLL NXT Navigation – leJOS NXJ – ruby-nxt – Robolab – Robotics.NXT – RoboMind – LibNXT – ROBOTC – PyNXC – NXTGCC – Physical Etoysz
  • 37. NXT-G
  • 38. Not eXactly C sub makeTestPlan() { string complete = "600303303007"; // complete = "6332211007601117"; completeLength = StrLen(complete); ArrayInit(moves, 0, completeLength); for (int i = 0; i < completeLength; i++) { moves[i] = StrToNum( SubStr(complete, i, 1)); } }
  • 39. Via!
  • 40. Problemi da affrontare • Scrivere un solver per Ruzzle • Costruire un robot • Scrivere il software per muovere il robot • Far comunicare il robot con il computer • Fare interagire il robot con il tablet (interazione macchina-macchina) • Prelevare l’immagine dal tablet • Riconoscere le lettere
  • 42. Schermi capacitivi 3 Strati: – conduttore trasparente (ossido metallico) – isolante (vetro) – matrice di condensatori a film Funzionamento: • Agli angoli dello schermo viene applicata una tensione elettrica • Quando il dito tocca lo schermo avviene una variazione di capacità superficiale, che viene letta dalla matrice di condensatori Samsung's Super AMOLED: 'in-cell' technology, elimina uno strato integrandolo nel display stesso
  • 43. Idea #1: il Wüsterone
  • 44. Idea #2: Yubitsume (指詰め)
  • 46. Fuoco: Spugna vegetale (1€) http://www.youtube.com/watch?v=tnMcalzBcKk
  • 48. I robot nella fantascienza
  • 49. Robot
  • 50.
  • 51. I robot nella realtà http://www.youtube.com/watch?v=sjAZGUcjrP8 Nelle industrie moderne sono gli umani ad esser rari
  • 52. I robot nella realtà www.youtube.com/watch?v=sjAZGUcjrP8 Se i robot fossero una specie, diremmo che stanno conquistando il mondo
  • 54. Prototipo • Scopo: – verificare la fattibilità della costruzione di un robot che si muovesse con precisione su 3 assi • Strategia: – progettazione modulare per quanto riguarda i movimenti sugli assi x e y, per distribuire uniformemente il peso – asse z: procedere per tentativi
  • 55.
  • 56. Prototipo • Risultato sperimentazione: – Ok, funziona – Riesco a muovere sui 3 assi: x, y, z – Strane imprecisioni nelle traiettorie, che imputavo ad un peso eccessivo o non equilibrato. Ma io voglio la migliore precisione possibile: cerco la causa e l’ispirazione.
  • 57. Bisogna sempre puntare in alto: ho cercato i video dei più precisi robot industriali http://www.youtube.com/watch?v=SOESSCXGhFo
  • 58. Prototipo Il problema: • non era nel mio software • non era nella mia costruzione • era nel firmware lego originale I motori lego si fermano dopo aver raggiunto la meta, non prima!
  • 59.
  • 60. Absolute Position Regulation “NXT Improved Firmware, that controls one motor so that its position matches the position set by the user. At any time, even when the motor is moving, the set position can be changed, and the control algorithm will move the motor towards the new position.” http://nxt-firmware.ni.fr.eu.org/changes/absolute_position_regulation/
  • 63. Robot #1 • Scopo: – unire tutto ciò che è stato fatto • Strategia: – costruzione modulare per quanto riguarda i movimenti sugli assi x e y – distribuzione dei pesi equilibrata
  • 64. Robot #1 Idea: scattare una fotografia all’iPad dalla webcam del portatile e processarla Problema: il “dito” avrebbe avuto diventare un braccio per non coprire il tablet Soluzione: metafora della scavatrice
  • 66. ..ma non una qualsiasi! http://www.youtube.com/watch?v=jH1cR2spwNs
  • 67. Robot #1 Problema: costruire un robot grande Soluzione: se la montagna non viene a Maometto…
  • 68. Ho aggiunto un riferimento all’unica dimensione assoluta che il nostro cervello possiede. Con un semplice omino la mia scavatrice è diventata immensa
  • 70. Problema Problema insormontabile: poca rigidità torsionale causa imprecisione di circa 3 mm nelle traiettorie diagonali Soluzione: distruggere tutto ciò che avevo costruito Smarrimento: serve un cambio radicale di paradigma
  • 72. Cambio di metafora: da scavatrice a gru a ponte
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78. Robot #2 Risultato: funziona! (errore max: circa 2mm) E ora? Che faccio? Va comunicato Come? Con un video su Youtube! Idea: L’omino lego, da strumento diventa protagonista di una storia http://youtu.be/ukPyJPFAwlo
  • 80. Sviluppi futuri • Leggere i modificatori di punti (2L, 3W) • RaspberryPi integration (via bluetooth) • Sikuli.org environment • Automazione totale • Trasferire la sfida a ruzzle al mondo delle macchine • Idee?
  • 81. Grazie • Codemotion Staff • Silvana • Open source projects – Tesseract – ImageMagick – Absolute position regulation – Node Mindstorm Bluetooth
  • 82. Feedback Qualsiasi feedback è prezioso! • alberto.sarullo@gmail.com • twitter.com/albertosarullo • fb.com/albertosarullo • linkedin.com/in/albertosarullo • github.com/albertosarullo N.B. Senza feedback non c’è miglioramento