venerdì 28 ottobre 2011

Navighiamo in 3D

Cari Amici del blog, oggi desidero parlarvi delle Mappe Georeferenziate SRTM (Shuttle Radar Topography Mission). Il progetto SRTM è da considerare uno sforzo colossale, organizzato dalla NASA e da altre Agenzie spaziali (ASI compresa), finalizzato alla realizzazione di un Data Base in 3D dell'intera superficie del nostro Pianeta Terra.

 


Nella precedente immagine vedete graficamente in cosa consiste l'output del progetto SRTM: una miriade di file altimetrici, detti TILE, perfettamente georeferenziati, che riportano in formato numerico l'altezza sul livello del mare (S.l.m.) di ogni rilievo, collina, montagna (isole e isolette, comprese), sparse per il nostro globo terraqueo ...una vera e propria manna per chi è interessato alla realizzazione di un autopilota/navigatore che, scherzosamente, nei precedenti post ho definito come "Un Robot alla Guida".

Come possiamo utilizzare i file HGT del progetto SRTM3?
Procediamo per passi ...e guardiamo insieme le relative immagini!

1) Aggiungiamo il Mare

2) Aggiungiamo il Sole

3) Aggiungiamo una Foto Satellitare dell'area di interesse

4) Elaboriamo l'immagine con un Ombreggiatore 3D ...e il gioco è fatto!!!
(Click per ingrandire - Golfo di Napoli, Penisola sorrentina, Capri)

Nella precedente foto abbiamo visto il risultato in una delle tante possibili viste prospettiche. Ma andiamo più in dettaglio e vediamo, con la prossima foto, cosa ci offre il Data Base SRTM3 con la sua risoluzione di 3'' Arco per Pixel.

Questa non è un immagine del Paneta Luna, il nostro caro satellite naturale, ma rappresenta una mappa ombreggiata dei Campi Flegrei, ovvero un'area vulcanica che si estende dalla Collina di Posillipo (Napoli) al Golfo di Pozzuoli e che comprende numerosi Comuni, situati in questa meravigliosa area storico-paesaggistica, ricchi di panorami mozzafiato e reperti archeologici.

Nella prossima immagine, estendendo un pò lo sguardo verso Sud, vediamo...


 ...in primo piano i Campi Flegrei, poi, il monte Vesuvio e, poi, un tratto della Penisola sorrentina.
Qui il tutto si vede meglio salendo sugli appennini al confine con la Provincia di Avellino...

...e qui in vista aerea.


Per gli amanti del "codice C", riporto il listato di un semplice programma utilizzabile per convertire un file HGT in formato BMP, meglio "digeribile" dai nostri PC.

/* SRTM Tile to BMP simple program */

#include <stdio.h>
union t_height {
    unsigned char in_chr[2];
    short height;
} t_height;
/* image buffer */
char buffer[1200][1200][3];

int main() {
    /* file pointer */
    FILE * fdin;
    FILE * fdout;
    /* array index */
    int x,y;
    /* color components */   
    char color_r;
    char color_g;
    char color_b;
    /* other */
    int min = 0;
    int max = 0;

    char bmp_header[] = {
        0x42, 0x4D, 0x36, 0xEB, 0x41, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00,
        0x00, 0x00, 0xB0, 0x04, 0x00, 0x00, 0xB0, 0x04,
        0x00, 0x00, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0xEB, 0x41, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00   
    };
   
    /* open SRTM tile file */
    fdin = fopen("N40E014.hgt", "r");
    if(fdin != NULL) {
        printf("Input file opened.\n");
    } else {
        exit(0);
    }   
    /* transcondig loop */   
    for(y=0; y<1200; y++) {
        for(x=0; x<1200; x++) {
            t_height.in_chr[1] = fgetc(fdin);
            t_height.in_chr[0] = fgetc(fdin);

            /* set color pixel */
            if (t_height.height == 0) {
                color_r = 0;
                color_g = 0;
                color_b = 128;
            } else if (t_height.height > 0) {
                color_r = t_height.height / 7;
                color_g = color_r;
                color_b = color_r;
            }
            buffer[x][y][0] = color_r; //red
            buffer[x][y][1] = color_g; //green
            buffer[x][y][2] = color_b; //blu      
            /* update min, max */
            if (t_height.height > max) {
                max = t_height.height;
            }
            if (t_height.height < min) {
                min = t_height.height;
            }                      
        }
        /* discard pixel 1201 */
        t_height.in_chr[1] = fgetc(fdin);
        t_height.in_chr[0] = fgetc(fdin);
    }   
    /* close .hgt files */
    fclose(fdin);
    /* open BMP file */
    fdout = fopen("SRTM.bmp", "w");
    if(fdout) printf("Output file opened.\n");
    /* write BMP 1200x1200 header */
    for(x=0; x<54; x++) {
        fputc(bmp_header[x], fdout);
    }
    /* write image buffer to BMP data area */
    for(y=1199; y>=0; y--) {
        for(x=0; x<1200; x++) {
            fputc(buffer [x][y][2], fdout); //blu
            fputc(buffer [x][y][1], fdout); //green
            fputc(buffer [x][y][0], fdout); //red
        }
    }   
    fclose(fdout);
    /* message */
    printf("Min: %d  Max: %d\n", min, max);
    printf("Conversion complete.\n");
    /* terminate program */
    return 0;
}

Nei prossimi post vedremo come utilizzare le Mappe SRTM nel nostro navigatore fai-da-te e vedremo anche come utilizzare il file-system Linux in abbinamento al Displey TFT a colori.

Qui Pianeta Terra ...in 3D, a presto.

sabato 22 ottobre 2011

Un Robot alla guida - Parte 2

Continuando con la nostra rassegna delle applicazioni robotiche dedicate alla guida dei veicoli (il precedente post lo travate qui), oggi esamineremo le potenzialità dei Sistemi Embedded nel controllo dell'assetto e della posizione, di uno Yacht ad alte prestazioni.

(prototipo del microcomputer di bordo)

Nella figura seguente viene rappresentata l'architettura del sistema di controllo con alcuni organi meccanici ...o meglio idrodinamici, coinvolti nella catena di controllo.
Come già descritto nei precedenti post, il sistema è basato su di una serie di sensori (giroscopi, accelerometri, magnetometri, misuratori di pressione, GPS, ecc.) e ha per obiettivo la stima dell'assetto (angoli euleriani) e della posizione sul geoide terrestre (sistema Earth Centered Earth Fixed - ECEF) secondo il modello WGS-84, e la conseguente regolazione degli organi attuatori (fin, flap, drive, rudder, thruster, ecc.).
Lo scopo è quello di migliorare la stabilità ed il comfort, e di agevolare la navigazione.

(fare click per ingrandire)

Perché utilizzare un sistema robotico quando possiamo manovrare manualmente i singoli organi? Alcune risposte proverò a fornirle nel seguente elenco:

  • Le condizioni del vento e delle correnti, mutano in continuazione, per non parlare della posizione dei nostri ospiti e del loro bagaglio. Dopo aver perfettamente "trimmato" l'assetto e  le eliche, ci ritroveremo a dover continuamente "correggere", mediante i joystick presenti in plancia, le nostre impostazioni.
  • Il bilanciamento dinamico del rollio, sia in condizioni di navigazione e sia "all'ancora" è impossibile da ottenere manualmente (non siete mica dei robot!) e occorre, quindi, un automatismo.
  • Le imbarcazioni navigano lungo rotte iso-magnetiche o mediante Way Point georeferenziati ...non è il caso di procedere "a occhio", meglio andare dritti che a zig-zag. Oltretutto si arriva prima e si consuma meno carburante!
  • Anche le manovre in porto, con vento al traverso, risultano particolarmente complesse. Meglio sarebbe avere un controllo automatico di Heading e Posizione, magari con il prezioso ausilio delle eliche di manovra.
  • Un Computer Embedded provvederà anche a completare tutti i controlli pre e post missione. Avete controllato le Vs. dotazioni di sicurezza. Si? Ok, prima di tutto la sicurezza!
Se vi state chiedendo in quali casi occorre un "robot alla guida", ecco alcuni esempi ...per immagini.
 (fare click per ingrandire, ne vale la pena!)

Bene, il dimostratore è stato completato, è un progetto Open ed è a Vs. disposizione ...pronto a raggiungervi nella sua valigetta Flight Case.


Qui Pianeta Terra, il cui 70% è coperto dai mari, a presto.

giovedì 13 ottobre 2011

Aviazione + Elettronica = Avionica

Questo post ha un sottotitolo che è: "una vita in volo".
Esso è dedicato al Prof. Ing. Luigi Pascale.

Non è mio compito definire la storia di un Pioniere, Appassionato, Pilota, Eminente Accademico, Industriale, Divulgatore, Sopravvisuto a diversi incidenti aerei e all'ineluttabile incidente del tempo, ma mi limiterò a sottolineare come l'evoluzione dei sistemi elettronici, a bordo dei velivoli, permea il mondo di quelle poche industrie italiane che, crisi o non crisi, fanno dell'eccellenza la loro unica arma vincente. Mi riferisco alla Tecnam S.r.l - Costruzioni Aeronautiche, che ho avuto l'onore di visitare oggi 13 Ott. 2011, grazie all'amico Angelo Gialanella, fotografo, "pilota quando possibile" e grande appassionato di Aeronautica.

Partiamo dalle origini, Vi propongo una foto di un pezzo unico quanto raro: il velivolo Partenavia P68R.


L'elettronica in questi casi era limitata alle telecominicazioni Terra-Bordo in HF e VHF, e sui velivoli apparva solo un sottile segno esteriore, l'antenna:


Il pannello strumenti era denso di indicatori analogici, giroscopi meccanici e condotti pneumatici, e anche nei velivoli più semplici (es. ULM) appariva così:


o così nei velivoli di Aviazione Generale:


Le cose cambiano, tutto cambia, e l'elettronica affre i suoi vantaggi anche al complesso mondo dell'aerospazio. Oggi, un velivolo ultraleggero (es. un P2002 Sierra LSA), si presenta con un pannello strumenti così:


I due display offrono una ampia varietà di strumenti "digitali" e di "dati di navigazione", completi di tutti i parametri per la corretta e sicura condotta del velivolo ...e non dimentichiamoci del motore:


Ma quando il gioco si fa duro, entrano in campo i velivoli certificati (es. CS-23) idonei ad operare in spazi aerei controlloti e sulle aerovie designate. In questo caso parliamo di un velivolo come il Partenavia P68, mostrato sopra, o come il Tecnam P2006T rappresentato nelle foto seguenti:

P2006T per Missioni Speciali
Cockpit digitale del P2006T ...un capolavoro!!!

In questi casi non possiamo che usare un'escalmazione ...usando la lettera 'B' dell'alfabeto fonetico internazionale, orgogliosamente dipinta su di un piano verticale di coda:


L'autore del blog, ringrazia la Tecnam per la cortesia, l'ospitalità e per l'opportunità offerta!


Qui Pianeta Terra + alcuni Km di Atmosfera per volare, a presto.

venerdì 7 ottobre 2011

Matematica Embedded

L'utilizzo di piccoli sistemi embedded, ad esempio microcontrollori 8-bit Microchip PIC o ATMEL AVR, è sempre più diffuso in elettrodomestici, apparecchi industriali e finanche gadget. Tali sistemi offrono spesso funzionalità smart che estendono il campo di utilizzo, aumentano l'affidabilità e offrono un dialogo più agevole con l'utilizzatore finale, rispetto all'equivalente apparecchio meccanico o elettromeccanico. Ma cosa accade quando la nostra micro-applicazione deve svolgere compiti ad elevata intensità di calcolo matematico? Spesso ci scontriamo con le limitazioni tipiche delle architetture a 8-bit, con la mancanza di acceleratori di calcolo, ridotta quantità di memoria e, ancor più spesso, limitazioni imposte dai tool di sviluppo (es. compilatori C).


In questo post vediamo, invece, come agevolmente il nostro compilatore open-source preferito, GNU GCC, dotato di una completa libreria di funzioni matematiche, svolge alcune operazioni trigonometriche e come, nell'esempio qui riportato, il nostro sistema operativo open-source preferito, Linux, ci supporta con disinvoltura.

Supponiamo di aver implementato il sistema che ho già descritto qui e ...procediamo per passi!

  • Editiamo il seguente programma sul nostro PC. Naturalmente il PC ospiterà una distribuzione Linux (es. Ubuntu) e, pertanto, potremo utilizzare gedit.

/* Semplice programma per generare */
/* una sinusoide a tre fasi        */

#include <stdio.h>
#include <math.h>

int main() {

    double step = 2.0f * M_PI / 360.0f;
    double angle = 0.0f;
    double f1 = 0.0f;
    double f2 = 2.094395f;
    double f3 = f2 * 2.0f;
    int i;
   
    for (i=0; i<360; i++) {
        printf("%f, %f, %f\n",
               sin(angle+f1),
               sin(angle+f2),
               sin(angle+f3)
              );
        angle = angle + step;
    }
    return 0;
}

  • Salviamo con il nome math.c
  • Compiliamo con arm-linux-3.4.2-gcc math.c -o math -lm
  • Apriamo una sessione di Terminal sul PC che utilizziamo come sistema di sviluppo per Linux Embedded.
  • Digitiamo: telnet 192.168.1.151 (indirizzo IP del target utilizzato nell'esempio) e accediamo ad una sessione bash sul target, grazie al server telnetd già operativo al boot.
  • A questo punto accediamo alla directory di sviluppo, fisicamente presente si sul PC, ma che è stata montata sul target grazie al server nfs, digitando il comando cd /mnt/develop/math.
  • Eseguiamo il nostro programma sul target con il comando ./math.
  • L'output del programma scorrerà sotto i nostri occhi ...e il gioco è fatto! La serie è stata prodotta ed è pronta per essere utilizzata in real time sul nostro computer Linux Embedded.

Per ulteriori dettagli sulla libreria matematica del linguaggio C, sulle funzioni supportate e sulle costanti definite, vi rimando alla pagina Wikipedia.

Qui Pianeta Terra, a presto.

giovedì 6 ottobre 2011

Storia di un Game Changer

La notizia della sua scomparsa è su tutte le prime pagine, un velo di commozione è dentro i nostri pensieri, qualcuno le ha definite "lacrime digitali", altri hanno rivisto in un lampo anni e anni di un simbolo, la "mela morsicata", che ha rappresentato l'innovazione dell'era informatica e un radicale cambiamento delle nostre vite!

 
In memoria di Steve Jobs 1955 - 2011

---- * ----

Ho cercato tra le mie riviste "d'epoca" tracce di quella storia che quest'uomo ha contribuito a scrivere. Vi riporto qui alcuni frammenti. Grazie e ...a presto!

Fine Anni '70 - Steve Wozniak progetta Apple I,
Steve Jobs fonda la Apple con il ricavato
della vendita di un pulmino WV

Questo era il linguaggio dei computer dell'epoca,
Applesoft BASIC

 
Anni '80 - Il mitico Apple II si diffondeva in Italia.
Nel logo compare una traccia del grande cambiamento
che il CRT a colori ha rappresentato per l'epoca

Linguaggio Assembler del 6502, cuore da 1MHz dell'Apple II

---- * ----

Y2K - iPhone e iPad,
Cambiano nuovamente le regole del personal computing


lunedì 3 ottobre 2011

Un Robot alla guida - Parte 1

Se avete parcheggiato la vostra nuova autovettura dopo aver udito il messaggio "Siete giunti nella destinazione desiderata", allora avete appena sperimentato il funzionamento di un sofisticato "sensore", ma in questo caso siete stati voi a svolgere la funzione di  "attuatore" ...un attuatore a comandi vocali e con patente di guida per autoveicoli. Non male ...e complimenti per la manovra!
Se invece avete da poco raggiunto la vostra località di lavoro o di vacanza, mediante un Jet di Linea, viaggiando per ore sopra diversi stati o continenti, e lungo le aerovie riservate a questo straordinario tipo di veicoli,  allora avete sicuramente sperimentato il funzionamento di ...un robot alla guida.
Certo non vi siete accorti di nulla, ma dietro la paratia di sicurezza, sotto la stretta sorveglianza dei piloti e dei controllori del traffico, un complesso sistema costituito da sensori, elaboratori e attuatori, Vi ha portato a destinazione, cullandovi dolcemente, con assoluta precisione e sicurezza. Questo sistema si chiama Autopilota, anche se oggi è con il termine Flight Management System che si indica il vero coordinatore di tutte le fasi del viaggio, dalla partenza, al volo, all'arrivo, e di cui l'autopilota in senso stretto è un sottosistema basilare.

(Prototipo di Autopilota Navigatore)

Ok, torniamo con i piedi sul nostro Pianeta Terra e, vediamo cosa è in preparazione nel mio laboratorio: un Autopilota Navigatore ...ci avrei scommesso!

In effetti è ancora un progetto in corso di sviluppo e suscettibile di modifche e miglioramenti, ma già la catena Sensore-Elaboratore-Attuatore, inizia a dare qualche soddisfazione. Guardiamo insieme il video che ho preparato per voi, e poi entreremo più nel dettaglio.


Visto? I componenti del sistema li ho già descritti in alcuni precedenti post: il Sensore di Assetto e Posizione, l'Elaboratore Linux con Display TFT e il simulatore di superfici mobili con controllore SoPC. Adesso è iniziata la fase di calibrazione e test. Per quanto riguarda la fase di test è indispensabile dotarsi di un software di simulazione, che sia in grado di elaborare un set di campioni, preferibilmente raccolti sul veicolo target,  quello su cui andremo a installare l'Autopilota; parametri che ci forniranno tutte le indicazioni per l'ottimizzazione degli algoritmi di controllo dell'assetto e della navigazione ...cioè la mente del "robot alla guida"!

Sel seguito vi elenco i principali argomenti che faranno parte di questo articolo, suddiviso in più post:
  • Architettura dell'Autopilota - Controllo del rollio, del beccheggio, della quota e della rotta (inseguimento barometrico e magnetico).
  • Funzioni di Navigazione - Il sensore GPS, i Dati Aria, le Mappe Digitali SRTM, i Piani di Navigazione.
  • Funzioni di Servizio - Le Cheklist, il controllo degli impianti di bordo (es. parametri motore, livelli e flussi dei liquidi stoccati a bordo, generatore elettrico, batteria, ecc.)
Infine, Vi ricordo, che il progetto nel suo complesso è isparato dalla filosofia Open e punta alla realizzazione di una comunità di sviluppatori e utilizzatori (gli utilizzatori possono essere ad esempio i proprietari di imbarcazioni da diporto, velivoli ULM, VLA, ecc), quindi, manifestatemi il vostro interesse a partecipare! Siamo all'inizio, lo so, ma tutte le cose hanno un inizio e non è mai troppo tardi per iniziare ...o per piantare un albero!

Qui Pianeta Terra, a presto.

sabato 1 ottobre 2011

Grazie 1350

In genere si dice "Grazie Mille", ma grazie a Voi il blog è stato visitato da tutti i paesi del mondo H24, i blog non dormono mai, e insieme abbiamo raggiunto più di 400 visualizzazioni sul canale YouTube "liberaelettronica" e circa 1000 hit su Blogspot.
L'elettronica è una materia ostica, ne sono consapevole, quindi ritengo questi numeri altamente significativi. 

Qui non si parla del più e del meno, dell'aria fritta e del gossip, ma si ci rinchiude in laboratorio, a sperimentare e imparare, si fanno le ore piccole a cercare quel bug subdolo che rischia di mandare all'aria anche il progetto più semplice. Certamente tutto ciò costa dei sacrifici, ma poi il risultato ...siete Voi.
Qui si dà voce al nostro "animal spirit", a quella voglia di farcela ...e ce la faremo, siatene pur certi! Oggi ho avuto notizia che il mio progetto relativo ai sistemi embedded modulari, open-source e dedicati alla robotica e all'automazione, soprattutto nel campo dei veicoli, è stato ammesso tra i progetti selezionati per l'incubatore d'impresa INCIPIT Campania. Questa sarà un'altra possibilità per dimostrare la nostra voglia di fare, grazie anche a Voi che siete i miei affezionati lettori ed una parte importante della mia forza di andare avanti, crisi o non crisi! In fondo la parola crisi, dal greco krisis, significa scelta, trasformazione, cambiamento; è noi abbiamo scelto.

Come al solito vi saluto con: Qui Paneta Terra, dove i sogni si realizzano, a presto. Ciro.