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.
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.
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.
#
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
#
/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 :)
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
# 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
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
#
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
#
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.
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
Nessun commento:
Posta un commento