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