mercoledì 9 ottobre 2013

Ar.Drone mod - parte 3

Prima di tornare a solcare i cieli, è bene fare almeno un'altra modifica.
Sul fondo del drone troviamo una pellicola nera di materiale plastico che serve per proteggere la scheda madre, però è talmente sottile che al massimo la può proteggere dalla... polvere!


Come potete immaginare, eventuali urti saranno però assorbiti dalla schema madre stessa che quindi rischia di rompersi a ogni uscita.

Per migliorare un pò la situazione ho deciso di montare un fondo ulteriore. In un primo momento l'ho fatto in alluminio, ma quando è arrivato il momento di montarlo mi sono reso conto che non sarebbe stata una grande idea perchè avrebbe schermato il già debole segnale WiFi.
Non potevo pensarci prima?!?!

Per il secondo tentativo ho cercato un materiale più permeabile alle onde elettromagnetiche, fortuna che l'ufficio è una risorsa di cianfrusaglie infinita!
Così ho recuperato la custodia di una cassetta da backup che per il mio scopo sembra proprio perfetta.


Utilizziamo la copertura originale per ricavarne la forma incidendo leggermente la custodia con un taglierino oppure utilizzando un pennarello



e poi procediamo a tagliare la plastica. Io mi sono servito di una sega da metallo per tagliare il grosso e di un dremel per le rifiniture.


Una volta ottenuto il nuovo pezzo possiamo montarlo, correggendo eventuali imperfezioni che impediscono il corretto montaggio.



Questo è un fondo! Ora anche se dovesse schiantarsi su un oggetto appuntito avrebbe qualche possibilità di sopravvivenza :)
























martedì 8 ottobre 2013

Ar.Drone mod - parte 2


Visto che il tempo non è d'accordo a farmi provare il drone con il joypad all'aperto andiamo avanti a sperimentare in casa.




Il nostro drone presenta sul fondo un connettore "misterioso" che dopo una breve ricerca su internet si rivela essere un connettore USB + seriale TTL 3,3 Volts. Per utilizzare l'una o l'altra connessione ci servono due cavi differenti oppure un unico cavo con 3 connettori.
Questo è lo schema principale del cavo per quanto riguarda la parte USB che fondamentalmente serve per aggiornare il firmware.





Come ho però letto sul blog di Chip Overclock http://coverclock.blogspot.it/search/label/AR.drone, la caratteristica più importante del connettore non è documentata. I piedini 4 (rx) e 6 (tx)  ci offrono l'accesso alla console seriale tramite la quale possiamo inviare comandi come se fossimo collegati in telnet, senza le limitazioni del WiFi. Possiamo quindi modificare le impostazioni di rete senza più pericolo di rendere inaccessibile il nostro giocattolino o inviare comandi di volo, cosa che ci tornerà utile più avanti.

La piedinatura completa è quindi la seguente


GND è comune sia al cavo usb che a quello seriale.

Per poter utilizzare questa connessione ci serve però un adattatore USB - Seriale in quanto ormai i pc moderni non hanno più una porta seriale disponibile.
Gli adattaori usb-seriale possono generare segnali a 5V o a 3,3 a seconda del modello. Il mio ovviamente è a 5V. Per evitare di bruciare qualcosa è necessaria una modifica.

http://weldinghamsters.blogspot.it/2009/11/modding-pl-2303-based-usb-to-rs-232.html

Come spiegato sul blog di Welding Hamsters, si può facilmente ottenere il segnale richiesto anche dal mio adattatore saldando un paio di fili sul chip che si occupa della conversione USB- Seriale ovvero il PL2303



come si può notare dallo schema i piedini 1 e 5 sono i due che ci servono oltre alla messa a terra che possiamo reperire un pò ovunque sulla scheda.
Saldare dei fili su piedini così piccoli è piuttosto difficile ma con un pò di pazienza si può fare tutto...
Questo è il risultato:


Il filo della massa l'ho collegato direttamente alla massa del cavo USB che è di più facile accesso.

Il connettore del drone si può facilmente ricavare da un connettore mini IDE che si pò trovare su vecchi portatili, ormai sono tutti SATA. Per fortuna sono riuscito a trovarne uno.




E questo è il risultato




Il cavo che ho poi creato è un cavo a Y che non si presenta molto bene ma che offre due USB maschio (quello azzurro è il seriale, quello nero è l'usb puro), il connettore del drone e il connettore seriale DB9 che però non ci serve a nulla.


N.B. Per utilizzare il cavo USB bisogna prima collegare il pc al drone e poi alimentarlo in modo che in fase di boot possa riconoscere la connessione attiva e attivare la modalità necessaria. Attaccare il cavo con il drone già acceso può causare SERI danni.

Quindi colleghiamo il cavo




e sempre tarmite Putty, impostando la connessione seriale sulla porta COM che viene creata dal nostro adattatore e gli altri parametri come da immagine seguente, sarà possibile connettersi alla console del drone.





Se tutto è andato come doveva andare, dovreste vedere la fase di boot con "qualche" dettaglio in più rispetto a quello che si può vedere via Telnet. :P



Parrotboot for target MYKONOS, git version pinst-v5.6.4-p6-0-gd918f90, built on May 30 2012
 ->  Change VDD2 reset value
nand_flash: By ONFI Manufacturer: MICRON      , Model: MT29F1G08AAC
nand_flash: Mode 4
nand_flash: Support ONFI v1.0
scaning start 40000 end 800000 page shift 11 eb size 131072
vid_hdr_offset 2048, data_offset 4096 leb_size 126976
image_seq is 2f5b72bd
new volume 4
new volume 0
new volume 1
parsed 4096 pages
volume 0 : "main_boot" ok (1777664)
Attempt booting on UBI volume with ID 0...

Booting Linux...'parrotparts=nand0:256K(Pbootloader),8M(Pmain_boot),8M(Pfactory),16M(Psystem),98048K(Pupdate) console=ttyPA0,115200 loglevel=4 ubi.mtd=Pfactory,2048 ubi.mtd=Psystem,2048 ubi.mtd=Pupdate,2048 root=ubi1:system rootfstype=ubifs parrot5.low_latency=1 '
init started: BusyBox v1.14.0 (2012-08-20 14:37:54 CEST)
starting pid 810, tty '': '/etc/init.d/rcS'
init started...
BMI Write Memory (address: 0x502070, filename: /lib/firmware/AR6002/eeprom.data)
BMI Write Memory (address: 0x513950, filename: /lib/firmware/AR6002/eeprom.bin)
BMI Execute (address: 0x913950, param: 0x0)
Return Value from target: 0x0
BMI Set App Start (address: 0x913950)
Updating MAC address
BMI Write compressed Memory (address: 0x502070, filename: /lib/firmware/AR6002/athwlan.bin.z77)
BMI Write Memory (address: 0x52d6c8, filename: /lib/firmware/AR6002/data.patch.hw2_0.bin)
BMI Write Memory (address: 0x500418, value: 0x52d6c8)
BMI Bit-Wise (OR) modify Register (address: 0x500410, orig:0xa, new: 0xb,  mask:0x1)
BMI Done
argc = 7
wmiconfig:fixRateMask=8
wmiconfig:fixRateMask=264
wmiconfig:fixRateMask=2312
SSID=dronenet
Creating AP Network dronenet
Using address 192.168.1.1
Owner's MAC address is:  00:00:00:00:00:00
Clearing pairing rule
Copy version.txt file in ftp directory
Check if update is necessary ...
File /update/ardrone_update.plf doesn't exists... Start Drone software...
/
init exit
if you want to customize init look at target/generic/target_skeleton/etc files
if crtl+c does not work look at the Linux FAQ section.

Please press Enter to activate this console. posix init start build on : Aug 20 2012 14:37:42
Use ctrl+\ (SIGQUIT) to end the application
plog drop: thread RT_THRESHOLD=19, SUP_THREAD_MINPRIORITY=31
plog drop: RR time quantum 0s 0ns
plog drop: thread guard size : default 4096
plog drop: thread guard size : set to 65536
plog drop: thread stack size : default 32768, minimal 16384, (system default 8388608)
plog drop: disable smp
**
** Mykonos v1.11.5  built for Hardware 11
** Build Aug 20 2012 14:52:04
**
tid=0x10b5a0, [I] POS: thread starting "Button Monitor" got 0x402bd490 native id
tid=0x10b350, [I] POS: thread starting "sup log" got 0x40318490 native id
tid=(nil), [E] POS: register : /dev/input/event0
tid=(nil), [E] POS: we register 1
init button
** ADC hard_version : c0
0.584262 NULL           6 0  adc device (soft 0x40046, hard 0xc0) loaded
0.610487 NULL           6 262214  adc device updater status file created
0.624311 NULL           6 772299  adc device updater status file deleted
0.625619 NULL           6 -1093302432  Scanning /data/custom.configs/applis ...
0.630751 NULL           6 0   located configuration file </data/custom.configs/applis/config.a0000ad2.ini>
0.634298 NULL           6 0   located configuration file </data/custom.configs/applis/config.96e3654b.ini>
0.637671 NULL           6 0   located configuration file </data/custom.configs/applis/config.a0000aa2.ini>
0.638035 NULL           6 0  Scanning /data/custom.configs/profiles ...
0.643110 NULL           6 0   located configuration file </data/custom.configs/profiles/config.a0000ad3.ini>
0.647211 NULL           6 0   located configuration file </data/custom.configs/profiles/config.659fecd2.ini>
0.651493 NULL           6 0   located configuration file </data/custom.configs/profiles/config.0cbca5dc.ini>
0.655642 NULL           6 0   located configuration file </data/custom.configs/profiles/config.a0000aa3.ini>
0.655940 NULL           6 0  Scanning /data/custom.configs/sessions ...
0.663045 NULL           6 0   located configuration file </data/custom.configs/sessions/config.6c96d6be.ini>
0.669230 NULL           6 0   located configuration file </data/custom.configs/sessions/config.a0000ad1.ini>
Motors flight anim. callback : <0,0>
Setting WiFi rate to auto
Owner's MAC address is: 00:00:00:00:00:00
Clearing pairing rule
Owner's MAC address is: 00:00:00:00:00:00
Clearing pairing rule
Motors leds callback : <0,0,0>
Userbox state callback : <0>
State : 0
0.970869 NULL           6 1668184435  SW VERSION : 00113D68
0.971834 NULL           6 1668184435  Configuring the vertical video pipeline ...
0.972125 NULL           6 971834  Configuring the horizontal video pipeline ...
0.972693 NULL           6 1718513475  Could not open BLC.hex file.
1.026821 NULL           6 0  BLC backup hex available
1.052660 NULL           6 825374774  BLC call for motor 1
1.073340 NULL           6 825374774  BLC check BLC memory corruption on motor 1
1.073500 NULL           6 808727347  BLC verify
1.092165 NULL           6 808727347  BLC verify OK
1.304887 NULL           6 -1093302124  syslog switches to buffer 1 (0x000FBEE8)
1.304824 NULL           6 825374774  BLC motor 1 soft version 1.43, hard version 3.0, supplier 1.1, lot number 11/10, FVT1 06/01/11
1.362627 NULL           6 825374774  BLC call for motor 2
1.383265 NULL           6 825374774  BLC check BLC memory corruption on motor 2
1.383461 NULL           6 892744243  BLC verify
1.402129 NULL           6 892744243  BLC verify OK
1.614824 NULL           6 825374774  BLC motor 2 soft version 1.43, hard version 3.0, supplier 1.1, lot number 11/10, FVT1 08.698597 Video_Hori     6 1022  Opening device Horizontal camera (/dev/video0) with resolution 640x480 and pixel format YU12
video_utils_init unknown codec 0
TAG_TYPE_COCKPIT 480
TAG_TYPE_COCKPIT 480
dct status 0x0

starting pid 978, tty '/dev/ttyPA0': '/bin/sh'


BusyBox v1.14.0 (2012-08-20 14:37:54 CEST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

#


In questo modo si può sperimentare qualsiasi configurazione del drone senza il pericolo di non poter più accedere alla console per rimediare al danno fatto :P





venerdì 4 ottobre 2013

Ar.Drone mod - parte 1

Finalmente mi sono deciso a prendere l'Ar.Drone! Era da un pò che ci pensavo, in realtà ne volevo fare uno da zero ma la disponibilità economica mi ha costretto a ripiegare sul prodotto della Parrot che, secondo me, vince alla grande se facciamo il rapporto Qualità/Prezzo. Poi usato costa ancora meno :P
Certo un Drone "vero" è un'altra cosa, però anche questo alla fine non è male come primo approccio a questo mondo, inoltre si tratta di un vero e proprio computer volante per cui offre qualche sfida in più oltre al saperlo pilotare.

Per provare il mio nuovo acquisto ho dovuto scaricare il suo sw per Android in modo da usare il cell come controller... il primo tentativo è stato piuttosto disastroso e mi sono subito reso conto quanto il controller scelto dalla Parrot poteva essere solo un buon modo per ridurre i costi globali del prodotto.
Il secondo tentativo, a distanza di una settimana, è andato decisamente meglio, però permane un senso di precarietà nei movimenti che non mi mette a mio agio. Per quanto ci abbia ragionato su, la casualità continua a fare da padrone.
Probabilmente non ho abbastanza esperienza ma distruggere tutto per farmela non mi sembra la scelta migliore, per cui dovrò cercare qualche via alternativa.

Il nostro amico crea una rete WiFi a cui ci si deve collegare per potergli inviare i comandi tramite cellulare.
La rete che troveremo è priva di sicurezza e potenzialmente chiunque ci si potrebbe collegare più che altro per disturbare il nostro volo già instabile a causa delle frequenti perdite di segnale.
Inoltre fa anche da server DHCP per fornire l'indirizzo al client che si deve collegare alla sua rete per permetterne il controllo.

Il drone di default ha indirizzo 192.168.1.1 e tramite Putty  possiamo collegarci in Telnet per  dare un'occhiata a cosa ci offre il sistema.


BusyBox v1.14.0 (2012-08-20 14:37:54 CEST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

#

Abbiamo a che fare con un sistema BusyBox, una versione di Linux sviluppata apposta per sistemi embedded, ( http://www.busybox.net/ ).

# cat /proc/version
Linux version 2.6.27.47-parrot (aferran@Mykuntu) (gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) ) #1 PREEMPT Mon Aug 20 14:46:29 CEST 2012

Questo è l'output di top, program.elf è il software principale che gestisce tutto il drone

Mem: 23220K used, 102848K free, 0K shrd, 0K buff, 4304K cached
Load average: 0.74 0.74 0.68 3/52 2715
  PID  PPID USER     STAT   VSZ %MEM COMMAND
  971   970 root     S    13892  11% /bin/program.elf
  969     1 root     S     2812   2% inetd
  956     1 root     S     2736   2% telnetd -l /bin/sh
  962     1 root     S     2736   2% /bin/sh /bin/memory_check.sh
  970     1 root     S     2736   2% /bin/sh /bin/check_update.sh
 1349   956 root     S     2736   2% /bin/sh
 1564   956 root     S     2736   2% /bin/sh
    1     0 root     S     2732   2% init
  958     1 root     S     2732   2% udhcpd /tmp/udhcpd.conf
  974     1 root     S     2732   2% init
  976     1 root     S     2732   2% /sbin/syslogd -n -m 0
  977     1 root     S     2732   2% /sbin/klogd -n
 2715  1564 root     R     2732   2% top
 2714   962 root     S     2600   2% sleep 10
  834     1 root     S     1632   1% /bin/factory_reset_cb
    2     0 root     SW<      0   0% [kthreadd]
    3     2 root     SW<      0   0% [ksoftirqd/0]
    4     2 root     SW<      0   0% [watchdog/0]
    5     2 root     SW<      0   0% [events/0]
    6     2 root     SW<      0   0% [khelper]
   75     2 root     SW<      0   0% [kblockd/0]
   87     2 root     SW<      0   0% [khubd]
   93     2 root     SW<      0   0% [kmmcd]
  116     2 root     SW       0   0% [pdflush]
  117     2 root     SW       0   0% [pdflush]
  118     2 root     SW<      0   0% [kswapd0]
  119     2 root     SW<      0   0% [aio/0]
  120     2 root     SW<      0   0% [nfsiod]
  764     2 root     SW<      0   0% [ubi_bgt0d]
  767     2 root     SW<      0   0% [ubi_bgt1d]
  771     2 root     SW<      0   0% [ubi_bgt2d]
  792     2 root     SW<      0   0% [p6-spi.0]
  805     2 root     SW<      0   0% [rpciod/0]
  814     2 root     SW<      0   0% [ubifs_bgt1_0]
  826     2 root     SW<      0   0% [ubifs_bgt2_0]
  828     2 root     SW<      0   0% [ubifs_bgt2_1]
  899     2 root     SW<      0   0% [ksdiorqd]
  900     2 root     SW<      0   0% [ar6000_io]

Questa è la configurazione della scheda WiFi

# iwconfig
lo        no wireless extensions.

ath0      AR6000 802.11g  ESSID:"dronenet"
          Mode:Master  Frequency:2.437 GHz  Bit Rate:24 Mb/s   Tx-Power=16 dBm  
          Sensitivity=0/3
          Encryption key:off
          Power Management:on
          Link Quality:255/94  Signal level:-96 dBm  Noise level:-96 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:3  Invalid misc:0   Missed beacon:0


Diamo un'occhiata al contenuto del disco

# ls
Change    dev       firmware  licenses  root      tmp       var
bin       etc       home      mnt       sbin      update
data      factory   lib       proc      sys       usr
#


Come tutti i sistemi linux ha un log sotto /var/log/messages in cui convergono buona parte dei messaggi di sistema. Non ne riporto il contenuto perchè il sistema logga parecchio soprattutto se è a pancia in su come in questo momento... (perchè a pancia in su? beh... la risposta nelle prossime puntate...)

Sotto /etc troviamo il file di configurazione del dhcp che rilascia fino a quasi 100 indirizzi

# cat etc/udhcpd.conf
start 192.168.1.2
end 192.168.1.100
interface ath0
option subnet 255.255.255.0
#


All'interno della cartella /data troviamo uno dei file più interessanti ovvero "config.ini"

# ls data
accs_infos.bin        fact_accs_infos.bin   syslog.bin
config.ini            navdata_blackbox.bin  video
custom.configs        old_adress.txt
emergency.bin         random_mac.txt

/data/config.ini contiene tutti i parametri per l'inizializzazione del sistema a ogni riavvio. Da qui si può modificare un pò tutto, tra cui il WiFi SSID, la configurazione IP, il funzionamento della scheda di rete stessa, lo stream video e altro.

# cat /data/config.ini

[general]
flying_time                    = 3613
num_version_config             = 1
num_version_mb                 = 17
num_version_soft               = 1.11.5
soft_build_date                = 2012-08-20 14:51
motor1_soft                    = 1.43
motor1_hard                    = 3.0
motor1_supplier                = 1.1
motor2_soft                    = 1.43
motor2_hard                    = 3.0
motor2_supplier                = 1.1
motor3_soft                    = 1.43
motor3_hard                    = 3.0
motor3_supplier                = 1.1
motor4_soft                    = 1.43
motor4_hard                    = 3.0
motor4_supplier                = 1.1
ardrone_name                   = My ARDrone
navdata_demo                   = TRUE
com_watchdog                   = 2
video_enable                   = TRUE
vision_enable                  = TRUE
vbat_min                       = 9000
drone_serial                   = PI040236AD1A218389

[network]
ssid_single_player             = dronenet
ssid_multi_player              = ardrone_v1.7.6
wifi_mode                      = 0
secure                         = FALSE
passkey                        =
navdata_port                   = 5554
video_port                     = 5555
at_port                        = 5556
cmd_port                       = 5559
owner_mac                      = 00:00:00:00:00:00
owner_ip_address               = 0
local_ip_address               = 0
broadcast_address              = 0

[control]
accs_offset                    = { -2.2265967e+03 1.8646592e+03 2.0777571e+03 }
accs_gains                     = {  9.9772358e-01 2.5741236e-02 4.3659292e-02  -2.1074675e-03 -9.9377209e-01 4.6503697e-02  9.8727606e-03 -7.4420400e-02 -9.6668828e-01 }
gyros_offset                   = { 1.6781360e+03 1.6794500e+03 1.7028979e+03 }
gyros_gains                    = { 6.8175443e-03 -6.7480663e-03 -3.8641607e-03 }
gyros110_offset                = { 1.6931400e+03 1.7010179e+03 }
gyros110_gains                 = { 1.4845658e-03 -1.4690076e-03 }
gyro_offset_thr_x              = 4.0000000e+00
gyro_offset_thr_y              = 4.0000000e+00
gyro_offset_thr_z              = 5.0000000e-01
pwm_ref_gyros                  = 470
shield_enable                  = 1
altitude_max                   = 5000
altitude_min                   = 500
outdoor                        = FALSE
flight_without_shell           = TRUE
brushless                      = TRUE
autonomous_flight              = FALSE
control_level                  = 0
euler_angle_max                = 2.0943952e-01
control_trim_z                 = 0.0000000e+00
control_iphone_tilt            = 3.4906584e-01
control_vz_max                 = 7.0000000e+02
control_yaw                    = 1.7453293e+00
manual_trim                    = FALSE
indoor_euler_angle_max         = 2.0943952e-01
indoor_control_vz_max          = 7.0000000e+02
indoor_control_yaw             = 1.7453293e+00
outdoor_euler_angle_max        = 3.4906584e-01
outdoor_control_vz_max         = 1.0000000e+03
outdoor_control_yaw            = 3.4906585e+00
magneto_offset                 = { 0.0000000e+00 0.0000000e+00 0.0000000e+00 }
magneto_radius                 = 0.0000000e+00
osctun_value                   = 0
osctun_test                    = FALSE

[pic]
ultrasound_freq                = 8
ultrasound_watchdog            = 3
pic_version                    = 100925510

[video]
camif_fps                      = 20
camif_buffers                  = 2
num_trackers                   = 12
video_on_usb                   = TRUE
video_file_index               = 1
codec_fps                      = 20

[leds]

[detect]
enemy_colors                   = 1
enemy_without_shell            = 0
groundstripe_colors            = 16
detect_type                    = 3
detections_select_h            = 0
detections_select_v_hsync      = 0
detections_select_v            = 0

[syslog]
output                         = 7
max_size                       = 102400
nb_files                       = 5

[custom]
application_desc               = Default application configuration
profile_desc                   = Default profile configuration
session_desc                   = Default session configuration

[userbox]

[gps]
latitude                       = 5.0000000000000000e+02
longitude                      = 5.0000000000000000e+02
altitude                       = 0.0000000000000000e+00

#

Da notare :

flying_time                    = 3613  (secondi)

Sono stato felicissimo di scoprire che il mio drone usato ha volato solo 40 minuti!! :D  20 li ho fatti io :)

Sotto /bin oltre ai file fondamentali per busybox troviamo anche gli script di configurazione della scheda WiFi.

# ls bin
ash               echo              ls                random_ip         true
busybox           egrep             memory_check.sh   random_mac        umount
cat               factory_reset_cb  mkdir             repairBoxes       uname
channelselector   false             mknod             reset_config.sh   usleep
check_update.sh   fgrep             mktemp            reset_dhcp.sh     vi
checkplf          gdbserver         mount             rm                watch
chgrp             getopt            mv                rmdir             wifi_adhoc.sh
chmod             grep              netstat           sed               wifi_infra.sh
chown             gunzip            nfs.sh            sh                wifi_managed.sh
cp                gzip              pairing_setup.sh  sleep             wifi_setup.sh
cttyhack          hostname          pidof             stat              zcat
date              ip                ping              stty
dd                ipcalc            program.elf       sync
df                kill              ps                tar
dmesg             ln                pwd               touch
#




Ho provato a riconfigurarla nei vari modi disponibili, con o senza i suoi script, ma senza successo. Non so se è dovuto all'ultimo firmware installato, ma ogni tentativo che ho effettuato mi ha portato a un misero fallimento. Ho provato a cambiare la modalità di funzionamento da Master (quella che mi presenta di default) a Managed, Client o Repeater, ma in ogni caso ottenevo solo "richieste scadute" verso qualsiasi altro IP della rete anche se il mio access point vedeva un client connesso.
L'unico metodo che ho trovato per accedervi dal pc fisso è stato collegare l'access point via Ethernet alla mia rete e via WiFi alla rete del drone, come Repeater.

Dopo essere riuscito a raggiungere il drone dal pc fisso, mi si è aperta la possibilità di controllarlo da Tastiera o Joystick tramite qualche SW per windows.
L'unico programma che sono riuscito a utilizzare è Windev16 ( http://repository.windev.com/resource.awp?file_id=76&lang=UK )




WOW! Ora è decisamente più controllabile di prima, non si rischia più di vedere il drone che se ne va per i fatti suoi perchè non ho premuto bene lo schermo o perchè sto inavvertitamente tenendo il telefono inclinato! ahhh che sollievo, è diventato semplicissimo da usare! Fantastico! Non vedo l'ora di provarlo all'aperto per vedere cosa si può fare con un joypad al posto del cellulare :D




giovedì 3 ottobre 2013

Si comincia!

Eccomi a scrivere il primo post della mia vita.
Mi serve un luogo dove registrare i miei progetti e cosa meglio di un Blog? vedremo cosa salterà fuori...