{"id":9752,"date":"2005-06-05T12:00:00","date_gmt":"2005-06-05T12:00:00","guid":{"rendered":"http:\/\/www.digicult.it\/digimag\/issue-003\/italiano-ghost-1-0-intelligenza-artificiale-interattiva\/"},"modified":"2020-10-13T17:32:00","modified_gmt":"2020-10-13T16:32:00","slug":"italiano-ghost-1-0-intelligenza-artificiale-interattiva","status":"publish","type":"post","link":"https:\/\/digicult.it\/it\/design\/italiano-ghost-1-0-intelligenza-artificiale-interattiva\/","title":{"rendered":"Ghost 1.0, Intelligenza Artificiale Interattiva"},"content":{"rendered":"<span class=\"cb-itemprop\" itemprop=\"reviewBody\">\n<p align=\"justify\">Un evento traumatico ha generato GHOST. GHOST ha paura e riconosce negli umani che visitano la stanza dei pericoli e come un animale reagisce ai movimenti bruschi. Ma se vi muovete lentamente e trovate il punto focale allora la memoria dell\u2019evento si rivela. GHOST nasce, insieme ad Heatseeker, come lavoro sull&#8217;immaginario collettivo e personale, in particolare come rielaborazione delle tematiche di J.G.Ballard. La scelta di una installazione interattiva e quindi di strutture narrative non lineari \u00e8 legata all&#8217;esplorazione di spazi che sono pi\u00f9 psichici e mnemonici che storici. GHOST \u00e8 un ambiente narrativo interattivo: narrativo in quanto prevede un percorso con un inizio, un centro dell&#8217;azione e una fine ed interattivo in quanto \u00e8 la presenza \u00e8 il movimento dell&#8217;interattore che permette lo svolgersi della narrazione. La stanza infatti \u00e8 quieta se nessuno la esplora. GHOST infatti agisce come una sorta di memoria, che reagisce alla nostra esplorazione.<\/p>\n<p>GHOST, nella versione \u00e8 stata presentata durante il festival ToShare a Torino. In questa occasione lo spazio era una stanza costruita ad hoc di circa 3 metri per 4; le pareti erano alte circa 3. Un corridoio chiuso da una tenda conduceva all\u2019interno. Nella stanza diversi sensori percepivano i movimenti e la posizione del visitatore. La minimale scenografia era composta da alcuni bidoni industriali, tracce di una civilt\u00e0 del petrolio [d\u2019acciaio]; il punto focale narrativo era il filmato mostrato in un monitor dentro uno dei bidoni. Una feritoia permetteva di osservare da fuori la stanza e chi vi si muoveva. I sensori erano dei comuni sensori da antifurto, modificati da Fabrizio Raimondo, in modo tale da essere collegati al digitalizzatore I-Cubex, che a sua volta codificava in uscita in formato MIDI. I segnali MIDI veniva poi letti da un software sviluppato ad hoc in Director MX eseguito su un titanium G4. Il portatile pilotava un paio di casse e il monitor nel bidone.<\/p>\n<table border=\"3\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td colspan=\"3\" width=\"280\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/digicult.it\/wp-content\/uploads\/archivio\/digimag03\/articoli\/img\/ia_motor03.jpg\" alt=\"\" width=\"280\" height=\"210\" \/><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p align=\"justify\">.<\/p>\n<p align=\"justify\">La stanza era pensata per un percorso individuale e la sensibilit\u00e0 dei sensori era tarata di conseguenza. I feedback di presenza e di movimento verso il visitatore erano di tipo sonoro e visivo. Il suono ricombinava, oltre a suoni ambientali e di station number, frammenti attribuiti ai dialoghi tra la torre di controllo e il pilota del volo UAFL93 che l&#8217;11 settembre 2001 si \u00e8 schiantato sul pentagono. La frequenza con cui apparivano i suoni nella stanza \u00e8 funzione dei movimenti del visitatore (pi\u00f9 movimenti = pi\u00f9 suoni).<\/p>\n<p align=\"justify\">La stanza percepiva i movimenti bruschi come aggressivi e cambiava suoni e frequenza di conseguenza. Dal fondo di uno dei bidoni d\u2019acciaio proveniva della luce colorata e animata. Se ci si avvicinava abbastanza, si scopriva che in realt\u00e0 la luce proveniva da un monitor. Il video partiva ma si interrompeva ad ogni movimento del visitatore, che era costretto a restare immobile per vederlo scorrere. Il filmato mostrava immagini di devastazione e messaggi testuali, poi al termine ordinava di uscire, mentre un sibilo ad alta frequenza riempiva la stanza fin quando non restava vuota . Naturalmente non tutti completavano il ciclo e qualcuno usciva prima di vedere ad esempio il video; altri entravano quando c\u2019era gi\u00e0 qualcuno, rendendo impossibile la visione.<\/p>\n<table border=\"3\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td colspan=\"3\" width=\"280\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/digicult.it\/wp-content\/uploads\/archivio\/digimag03\/articoli\/img\/ia_motor04.gif\" alt=\"\" width=\"280\" height=\"210\" \/><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p align=\"justify\">.<\/p>\n<p align=\"justify\">L\u2019idea \u00e8 stata quella di dare alla stanza una sorta di ruolo attivo ed una intelligenza (sia pur semplificata) per eseguire la parte. GHOST \u00e8 presentato quindi come una sorta di organismo abbastanza primitivo, tipo un insettoche risponde al modello \u201cpercezione-analisi-reazione\u201d. La percezione era poco pi\u00f9 che la raccolta dei dati sensoriali (per adesso i segnali degli IR e del tappetino a pressione). I segnali raccolti (codificati attraverso il MIDI) giungevano alla struttura di analisi di GHOST. In base allo stato interno e ai segnali provenienti dal mondo esterno GHOST decideva quali eventi fossero pi\u00f9 significativi e se era il caso cambiava umore. Quindi la parte di reazione si incaricava appunto di reagire, ad esempio scegliendo quali suoni o immagini mostrare.<\/p>\n<p class=\"testoscuro\" align=\"justify\">CODICE UTILIZZATO PER GHOST<\/p>\n<p align=\"justify\">Il codice che viene mostrato \u00e8 in realt\u00e0 pseudo codice Lingo tratto da quello originale di GHOST, ma per motivi di chiarezza \u00e8 stato semplificato per mostrare il meccanismo; in GHOST ovviamente ci sono molti dettagli specifici in pi\u00f9.<\/p>\n<p>Il ciclo principale di GHOST \u00e8 :<\/p>\n<p>on Main<\/p>\n<p>&#8212; input from sensor and preprocessing<br \/>\nGHOSTSensorInput<\/p>\n<p>&#8212; processing (internal\/external status and FSM settings<br \/>\nGHOSTProcessing<\/p>\n<p>&#8212; output<br \/>\nGHOSTScape<\/p>\n<p>end Main<\/p>\n\n<p>Code percezione GHOSTSensorInput (in buona parte tratto da Mark Coniglio)<\/p>\n<p>Il codice si occupa semplicemente di vedere quale messaggio MIDI arrivi (attraverso l&#8217;ICUBEX) e di mapparlo su variabili interni. Nel codice vediamo ad esempio come reagisce all&#8217;arrivo di un messaggio NoteOn (ma lo stesso vale in generale). Le chiamate MIDI fanno riferimento all&#8217;XTRA XMIDI di Mark Coniglio, che su OSX ha funzionato senza problemi. Ad esempio se arriva un NoteOn 68 questo significa che qualcuno ha messo un piede sul sensore a tappeto.<\/p>\n<p>on GHOSTSensorInput<\/p>\n<p>message = getNextMessage(xm)<br \/>\n&#8212; debug only<br \/>\nMIDImessage = message<\/p>\n<p>if (getAt(message, 1) &lt;&gt; -1) then &#8212; if there was a message<br \/>\nif (getAt(message, 1) = 144) then<\/p>\n<p>set currentNoteOn to getAt(message,3)<\/p>\n<p>case currentNoteOn of<\/p>\n<p>&#8220;67&#8221; :<\/p>\n<p>IRVideoBarrier = true<\/p>\n<p>&#8220;68&#8221; :<\/p>\n<p>carpetSensor = true<\/p>\n<p>&#8220;69&#8221; :<\/p>\n<p>IRPresenceTrigTime = the milliseconds<\/p>\n<p>append(presenceTriggaList,IRPresenceTrigTime)<\/p>\n<p>&#8220;71&#8221;:<\/p>\n<p>IRMovement = true &#8212; a trigger movement has been detected<br \/>\n&#8212;<br \/>\nIRMoveTime = the milliSeconds<br \/>\n&#8212;<br \/>\n&#8212;<br \/>\nappend(movaTriggaList,IRMoveTime)<\/p>\n<p>&#8212;<br \/>\n&#8212;<\/p>\n<p>end case<\/p>\n<p>end if<br \/>\nend if<\/p>\n\n<p>Code analisi GHOSTProcessing?<\/p>\n<p>Per gestire gli umori di GHOST abbiano usato una soluzione classica: la state machine.<\/p>\n<p>La GHOST state machine \u00e8 appunto una semplice macchina a tre stati Nella nostra narrazione GHOST in genere \u00e8 tranquillo (\u201cQUIET\u201d), ma se accade qualcosa si allarma (\u201cFEAR\u201d) e in casi particolari pu\u00f2 anche diventare minaccioso (\u201cMENACE\u201d).<\/p>\n<p>inserire grafico aggiornato state machine (vedi jpg allegato)<\/p>\n<p>Per prima cosa occorre interpretare i dati sensoriali e vedere se \u00e8 accaduto qualcosa di significativo (EVENT DETECTION).<\/p>\n<p>on EventDetection<br \/>\nglobal IRVideoBarrier, oldIRVideoBarrier &#8212; IR video barrier output<br \/>\nglobal carpetSensor, oldCarpetSensor &#8212; carpet sensor output<br \/>\nglobal GateInfo,oldGateInfo &#8212; Gate sensors output<br \/>\nglobal IRMoveAlarm, oldIRMoveAlarm<br \/>\nglobal videoEnded &#8212; end of video trasmission<br \/>\nglobal videoZone, oldVideoZone &#8212; T if the human is in front of video<br \/>\nglobal GhostEvent<\/p>\n<p>videoZone = (IRVideoBarrier or carpetSensor) &#8212; human in videoZone<\/p>\n<p>GhostEvent = &#8220;&#8221; &#8212; reset event variable<\/p>\n<p>&#8212; is somebody entering in the room?<br \/>\nif not oldGateInfo and GateInfo then &#8212; somebody is entering in the room! red alert!<br \/>\nGhostEvent = &#8220;humanJustInside&#8221;<\/p>\n<p>&#8212;<\/p>\n<p>else<br \/>\nif GateInfo then &#8212; somebody is in the room<\/p>\n<p>if IRMoveAlarm and not oldIRMoveAlarm then &#8212; movement detected<br \/>\nGhostEvent = &#8220;moveDetected&#8221;<\/p>\n<p>end if<\/p>\n<p>if not IRMoveAlarm and oldIRMoveAlarm then &#8212; movement stopped<br \/>\nGhostEvent = &#8220;moveStopped&#8221;<\/p>\n<p>end if<\/p>\n<p>if videoZone and not oldVideoZone then &#8212; human just entered videoZone<br \/>\nGhostEvent = &#8220;humanJustInsideVideo&#8221;end if<\/p>\n<p>if not videoZone and oldVideoZone then &#8212; human just exit from videoZone<br \/>\nGhostEvent = &#8220;humanLeftVideoZone&#8221;<\/p>\n<p>end if<\/p>\n<p>if videoEnded then &#8212; menace phase completed<br \/>\nGhostEvent = &#8220;endVideo&#8221;<\/p>\n<p>end if<br \/>\nelse<\/p>\n<p>if oldGateInfo then<br \/>\nGhostEvent = &#8220;humanLeftRoom&#8221; &#8212; human left room<\/p>\n<p>end if<\/p>\n<p>end if<\/p>\n<p>end if<\/p>\n<p>oldGateInfo = GateInfo<br \/>\noldIRMoveAlarm = IRMoveAlarm<br \/>\noldIRVideoBarrier = IRVideoBarrier<br \/>\noldCarpetSensor = carpetSensor<br \/>\noldVideoZone = videoZone<\/p>\n<p>end<\/p>\n<p>In questa routine la variabile da tenere d&#8217;occhio \u00e8 GhostEvent, i cui valori dovrebbero essere leggibili&#8230;ok qualche dettaglio non guasta. EventDetection legge i valori gi\u00e0 interpretati che arrivano dai sensori: ad esempio carpetSensor indica semplicemente che qualcuno sta calpestando il tappetino sensore (che avevamo nascosto nella stanza). In base ai dati sensoriali GHOST decide quindi se \u00e8 successo qualcosa di nuovo o di interessante.A seconda dello stato la stanza reagisce in modo ovviamente diverso, come un animale spaventato reagisce in modo diverso da uno tranquillo.<br \/>\nEsiste anche una sorta di gerarchia implicita nell&#8217;ordine con cui vengono esaminati i sensori: questo perch\u00e9 alcuni segnali possono essere molto pi\u00f9 importanti di altri (immaginate ad esempio che sentiate il ruggito di un leone e che contemporaneamente sentiate un profumo di torta alle mele&#8230;quale dei due segnali dovreste esaminare prima? )<\/p>\n<p>Inoltre pi\u00f9 che il valore attuale di un sensore, \u00e8 importante vedere se qualcosa \u00e8 cambiato e per questo motivo memorizziamo i valori precedenti (ad esempio oldCarpetSensor)<\/p>\n<p>Una volta che EventDetection \u00e8 stata eseguita, chiamata da GHOSTProcessing, allora possiamo determinare quale sar\u00e0 lo stato interno (umore) di GHOST.<\/p>\n<p>Le variabili chiave sono currentFSMstatus e GhostEvent.<br \/>\nNelle prime righe vediamo che se siamo in uno stato di quiete (currentFSMstatus = &#8220;quiet&#8221;) e GHOST si \u00e8 accorto che qualcuno si muove nella stanza (GhostEvent = &#8220;moveDetected&#8221;) allora giustamente c&#8217;\u00e8 da preoccuparsi (newGHOSTstatus = &#8220;fear&#8221;)!<\/p>\n<p>Da notare anche che al momento della transizione viene comodo (anche se poco elegante, lo ammetto) resettare alcune variabili o comunque inserire tutte le eventuali inizializzazioni per la nuova fase.<\/p>\n<p>on GHOSTProcessing<\/p>\n<p>global currentFSMstatus &#8212; main room mood definition<\/p>\n<p>global GhostEvent &#8212; event detected from sensors<br \/>\nglobal gateInfo, oldGateInfo &#8212; info from the IR Barriers : INSIDE,BETWEEN,OUTSIDE<\/p>\n<p>global videoZoneStatus,videoZone<\/p>\n<p>global carpetsensor, irvideobarrier &#8212; debug only<\/p>\n<p>EventDetection &#8212; GhostEvent detection<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n<p>&#8212; GHOST main FSM machine, define mood of the room<br \/>\n&#8212; from the current status and events define transition for the FSM<br \/>\n&#8212; if a new event has happened then a new related transition will be performed<\/p>\n<p>&#8230;<\/p>\n<p>newGHOSTStatus = &#8220;&#8221;<\/p>\n<p>if currentFSMstatus = &#8220;quiet&#8221; then<\/p>\n<p>if GhostEvent = &#8220;moveDetected&#8221; then<br \/>\nnewGHOSTstatus = &#8220;fear&#8221;<\/p>\n<p>sound(1).stop()<\/p>\n<p>sound(1).volume = 0<\/p>\n<p>&#8212;<\/p>\n<p>else if GhostEvent = &#8220;humanJustInsideVideo&#8221; then<br \/>\nnewGHOSTstatus = &#8220;menace&#8221;<br \/>\nsound(1).stop()<\/p>\n<p>set sequenceStart to random(VideoticksLenght &#8211; 60*15) &#8212; reset movie pointer<\/p>\n<p>end if<\/p>\n<p>else<\/p>\n<p>if currentFSMstatus = &#8220;fear&#8221; then<\/p>\n<p>if not gateInfo then<\/p>\n<p>newGHOSTStatus = &#8220;quiet&#8221;<br \/>\n&#8212;<br \/>\noldVideoZone = false &#8212; reset video sensor, force to transition again<\/p>\n<p>sound(1).stop()<\/p>\n<p>else<br \/>\nif GhostEvent =&#8221;humanJustInsideVideo&#8221; then<br \/>\nnewGHOSTStatus = &#8220;menace&#8221;<\/p>\n\n<p>sound(1).stop()<br \/>\nsound(2).stop()<br \/>\nsound(3).stop()<\/p>\n<p>end if<\/p>\n<p>end if<\/p>\n<p>else<\/p>\n<p>if currentFSMstatus = &#8220;menace&#8221; then<br \/>\nif GhostEvent = &#8220;humanLeftRoom&#8221; then<br \/>\nmember(10).fileName = &#8220;seq2.mov&#8221;<\/p>\n<p>newGHOSTstatus =&#8221;quiet&#8221;<br \/>\nsound(3).stop()<\/p>\n<p>else<br \/>\nif (not (videoZone) and videoZoneStatus &lt;&gt; &#8220;go away!&#8221;) then<br \/>\nmember(10).fileName = &#8220;seq2.mov&#8221;<\/p>\n<p>newGHOSTStatus = &#8220;fear&#8221;<br \/>\nsound(1).stop()<br \/>\nsound(2).stop()<br \/>\nsound(3).stop()<br \/>\nend if<br \/>\nend if<\/p>\n<p>end if<br \/>\nend if<br \/>\nend if<\/p>\n<p>if newGHOSTStatus &lt;&gt; &#8220;&#8221; then<br \/>\ncurrentFSMstatus = newGHOSTStatus<br \/>\nend if<\/p>\n<p>end GHOSTProcessing<\/p>\n<p>E&#8217; chiaro che il mondo di GHOST \u00e8 solo quello percepito attraverso i sensori, anche se nulla vieta di aumentare il numero e i tipi di sensore. Insieme esiste gi\u00e0 una codifica implicita di cosa corrisponda ad un dato sensore. Ad esempio GHOST presuppone che carpetSensor sia posto davanti al video nel bidone.<\/p>\n<p>Memoria in GHOST.<br \/>\nIn apparenza la memoria di GHOST \u00e8 determinata solo dalla macchina stati. In realt\u00e0 questo non bastava, ad esempio, per capire se il visitatore si muoveva velocemente o meno.<br \/>\nPer alcuni sensori (ad esempio sotto per il sensore principale di movimento, un IR modificato) occorreva ricordarsi anche dei segnali passati.<br \/>\nPer prima cosa allora ogni segnale del sensore viene registrato come una tag in millisecondi, corrispondenti all&#8217;istante in cui il sistema l&#8217;ha percepito, in una lista, movaTriggaList. Poi occorre decidere un intervallo di tempo da esaminare. In questo caso la logica \u00e8 che se negli ultimi due secondi ho avuto pi\u00f9 di TriggaNumAlarm segnali, allora ho dei movimenti veloci. I sensori da noi usati hanno dei tempi di risposta sulla decina di millisecondi.<br \/>\nDunque per questo sensore ho una &#8220;memoria&#8221; di 2000 millisecondi. Non sarebbe difficile aumentare questa memoria, ma al tempo stesso questo aumenta il tempo di reazione di GHOST a due secondi! Per dare un feedback allo user occorre stare sotto i 50-100 millisecondi; quindi lo stesso segnale viene elaborato in modi diversi, se serve cambiare l&#8217;umore o a dare feedback.<\/p>\n<p>on IRMovementProcessing(triggaTime)<\/p>\n<p>&#8212; IRMovement Data Processing<br \/>\n&#8212; any IRMovement is time stamped<br \/>\n&#8212; create a list movaTriggaList, who contains all the last triggers detected<br \/>\n&#8212; if a trigger is too old then delete it<br \/>\n&#8212; if in the last time interval are too many triggers then alarm!<br \/>\n&#8212; triggaTime is the time in milliseconds when the midi trigger was received<\/p>\n<p>global movaTriggaList<br \/>\nglobal triggaInterval &#8212; interval of time to be examined (in milliseconds)<br \/>\nglobal triggaNumAlarm &#8212; threshold of number of trigger to generate an IRmoveAlarm<br \/>\nglobal IRMoveAlarm, IRVoiceAlarm, oldIRMoveAlarm<\/p>\n<p>triggaInterval = 2000 &#8212; observation time interval in milliseconds<br \/>\ntriggaNumAlarm = 2 &#8212; trigger number threshold to generate an alarm<br \/>\ntriggaVoiceAlarm = 1 &#8212; trigger number threshold to play alarm voices<\/p>\n<p>&#8212; the triggaNumAlarm and triggaInterval should be setted via tuning interface and saved via preference file<br \/>\n&#8212; tentative value triggaNumAlarm = 1 and triggaInterval = 100 milliseconds<\/p>\n<p>nowTime = the milliseconds<\/p>\n<p>triggaNum = count(movaTriggaList)<\/p>\n<p>startInterval = nowTime &#8211; triggaInterval<\/p>\n<p>repeat with i= 1 to count(movaTriggaList)<br \/>\nif (getat(movaTriggaList,i) &lt; startInterval) then deleteAt(movaTriggaList, 1)<br \/>\nend repeat<\/p>\n<p>oldIRMoveAlarm = IRMoveAlarm<br \/>\noldIRVoiceAlarm = IRVoiceAlarm<br \/>\nIRMoveAlarm = (triggaNum &gt;= triggaNumAlarm)<br \/>\nIRVoiceAlarm = (triggaNum&gt;= triggaVoiceAlarm)<\/p>\n<p>end<\/p>\n\n<p>il mondo di GHOST \u00e8 ricostruito sui dati sensoriali, ma ha gi\u00e0 una struttura per l\u2019aspettativa \u2026legato di fatto ad una backstory, che \u00e8 da scoprire, anche attraverso gli indizi del video.<\/p>\n<p>In ultimo, esaminati i dati sensoriali e deciso come interpretarli e di che umore sar\u00e0 GHOST, occorre decidere quali azioni eseguire.In questo caso saranno scelti dei suoni e delle immagini ad hoc per il visitatore. Il codice \u00e8 nella routine GHOSTScape, che in funzione principalmente di currentFSMstatus decide di conseguenza.<\/p>\n<p>reaction code<\/p>\n<p>on GHOSTScape<br \/>\n&#8212; define the GHOST scape and other reactions, based on the main GHOST FSM status<\/p>\n<p>global currentFSMstatus, oldCurrentFSMStatus<br \/>\nglobal gateInfo<\/p>\n<p>global<\/p>\n<p>case currentFSMStatus of<br \/>\n&#8220;quiet&#8221;:<br \/>\nGHOSTSound &#8212; slowly evolving little sounds, childish, carillons on channel 1<\/p>\n<p>randomBackGround(69) &#8212; display randomly choosed images<\/p>\n<p>sprite(15).visible = true<\/p>\n<p>&#8220;fear&#8221;:<br \/>\nGHOSTSound<br \/>\nrandomBackGround(69) &#8212; display randomly choosed images<br \/>\nsprite(15).visible = true<\/p>\n<p>&#8220;menace&#8221;:<\/p>\n<p>sprite(15).visible = false<br \/>\nGHOSTVideoMenace<br \/>\nGHOSTSound<\/p>\n<p>end case<\/p>\n<p>oldCurrentFSMStatus = currentFSMStatus<\/p>\n<p>end GHOSTScape<\/p>\n<p>Quello che conta in questa routine \u00e8 che ad ogni stato (umore) di GHOST corrisponda un set diverso di reazioni, eventualmente con logiche completamente diverse.<\/p>\n<p>A questo punto si inserisce di fatto lo user, che agendo nella stanza attiva dei nuovi segnali e il ciclo ricomincia. Ogni ciclo completo dura circa 50 millisecondi (grazie al G4) e basta per dare la sensazione di continuit\u00e0 dell&#8217;azione al visitatore.<\/p>\n\n<p>Considerazioni finali sull\u2019installazione:<\/p>\n<p>Tecnicamente GHOST ha funzionato bene. Gli unici inconvenienti sono stati lo scollamento dalle pareti in un paio di occasioni dei sensori; altrimenti il sistema ha lavorato ininterrottamente per i cinque giorni del festival senza problemi.<br \/>\nDal punto di vista del loop GHOST-visitatori , credo che nella maggior parte dei casi fosse evidente che la stanza reagisse e interagisse, meno evidente invece quali fossero le logiche interne.<br \/>\nCurioso come si attivasse un meccanismo di comunicazione tra i visitatori, quando si formava una coda in attesa davanti alla stanza.<\/p>\n<p>Spero che questi semplici esempi diano una idea dell&#8217;approccio usato. La chiave di interpretazione \u00e8 di avere scritto il codice intorno ad una metafora ed a avere strutturato per funzionalit\u00e0.<\/p>\n<p>Un&#8217;altra lezione l&#8217;abbiamo ricavata nella scelta della metodologia di progetto: dati i limiti di tempo e di risorse , il progetto \u00e8 stato condotto usando l\u2019approccio \u201cextreme programming\u201d (approccio che prevede lavoro in coppia, molta comunicazione, molto prototiping e testing, hw e sw per supportare lo sviluppo rapido e il testing). Il lavoro \u00e8 stato codificato, testato e installato in meno di due settimane, preparando i sensori e scrivendo il codice da zero (il video e l\u2019audio invece erano presi a prestito dal progetto HEATSEEKER ( HYPERLINK &#8220;http:\/\/www.heatseeker.it&#8221; www.heatseeker.it).<\/p>\n<p>suggested bibliography<br \/>\nJ.G.Ballard La mostra delle atrocit\u00e0 www.jgballard.com<\/p>\n<p>Premier.Press.Data.Structures.For.Game.Programmers.pdf<br \/>\nOReilly.AI.for.Game.Developers.Jul.2004.eBook-DDU.chm<br \/>\nMIT.Press.Rules.of.Play.Game.Design.Fundamentals.chm<br \/>\nWordware.Publishing.Programming.Game.AI.by.Example.eBook-LiB.chm<\/p>\n\n<p>risorse<br \/>\nXMIDI di Mark Coniglio www.troikaranch.com\n<\/span>","protected":false},"excerpt":{"rendered":"<p>Motor e Gianni Corino descrivono la loro installazione interattiva Ghost 1.0 presentata a Torino al Piemonte Share Festival<\/p>\n","protected":false},"author":89,"featured_media":31310,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[239,36,156],"tags":[80],"class_list":["post-9752","post","type-post","status-publish","format-standard","has-post-thumbnail","category-articles","category-design","category-issue-003","tag-interaction"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Ghost 1.0, Intelligenza Artificiale Interattiva &#8226; Digicult | Digital Art, Design and Culture<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/digicult.it\/design\/italiano-ghost-1-0-intelligenza-artificiale-interattiva\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ghost 1.0, Intelligenza Artificiale Interattiva &#8226; Digicult | Digital Art, Design and Culture\" \/>\n<meta property=\"og:description\" content=\"[:it]Motor e Gianni Corino descrivono la loro installazione interattiva Ghost 1.0 presentata a Torino al Piemonte Share Festival[:]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/digicult.it\/design\/italiano-ghost-1-0-intelligenza-artificiale-interattiva\/\" \/>\n<meta property=\"og:site_name\" content=\"Digicult | Digital Art, Design and Culture\" \/>\n<meta property=\"article:published_time\" content=\"2005-06-05T12:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-10-13T16:32:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/digicult.it\/wp-content\/uploads\/2005\/06\/ia_motor02.gif\" \/>\n\t<meta property=\"og:image:width\" content=\"280\" \/>\n\t<meta property=\"og:image:height\" content=\"210\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/gif\" \/>\n<meta name=\"author\" content=\"Motor\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Motor\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/digicult.it\/design\/italiano-ghost-1-0-intelligenza-artificiale-interattiva\/\",\"url\":\"https:\/\/digicult.it\/design\/italiano-ghost-1-0-intelligenza-artificiale-interattiva\/\",\"name\":\"Ghost 1.0, Intelligenza Artificiale Interattiva &#8226; Digicult | Digital Art, Design and Culture\",\"isPartOf\":{\"@id\":\"https:\/\/digicult.it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/digicult.it\/design\/italiano-ghost-1-0-intelligenza-artificiale-interattiva\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/digicult.it\/design\/italiano-ghost-1-0-intelligenza-artificiale-interattiva\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/digicult.it\/wp-content\/uploads\/2005\/06\/ia_motor02.gif\",\"datePublished\":\"2005-06-05T12:00:00+00:00\",\"dateModified\":\"2020-10-13T16:32:00+00:00\",\"author\":{\"@id\":\"https:\/\/digicult.it\/#\/schema\/person\/ba66ac75d5000c2c79a089c82736413e\"},\"breadcrumb\":{\"@id\":\"https:\/\/digicult.it\/design\/italiano-ghost-1-0-intelligenza-artificiale-interattiva\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/digicult.it\/design\/italiano-ghost-1-0-intelligenza-artificiale-interattiva\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/digicult.it\/design\/italiano-ghost-1-0-intelligenza-artificiale-interattiva\/#primaryimage\",\"url\":\"https:\/\/digicult.it\/wp-content\/uploads\/2005\/06\/ia_motor02.gif\",\"contentUrl\":\"https:\/\/digicult.it\/wp-content\/uploads\/2005\/06\/ia_motor02.gif\",\"width\":280,\"height\":210},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/digicult.it\/design\/italiano-ghost-1-0-intelligenza-artificiale-interattiva\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/digicult.it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ghost 1.0, Intelligenza Artificiale Interattiva\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/digicult.it\/#website\",\"url\":\"https:\/\/digicult.it\/\",\"name\":\"Digicult | Digital Art, Design and Culture\",\"description\":\"Dal 2005 Digicult \u00e8 una piattaforma che esamina l&#039;impatto delle tecnologie sull&#039;arte, il design, la cultura e la societ\u00e0 contemporanea\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/digicult.it\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/digicult.it\/#\/schema\/person\/ba66ac75d5000c2c79a089c82736413e\",\"name\":\"Motor\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/digicult.it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/digicult.it\/wp-content\/uploads\/2015\/12\/motor-96x96.jpg\",\"contentUrl\":\"https:\/\/digicult.it\/wp-content\/uploads\/2015\/12\/motor-96x96.jpg\",\"caption\":\"Motor\"},\"url\":\"https:\/\/digicult.it\/it\/author\/motor\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Ghost 1.0, Intelligenza Artificiale Interattiva &#8226; Digicult | Digital Art, Design and Culture","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/digicult.it\/design\/italiano-ghost-1-0-intelligenza-artificiale-interattiva\/","og_locale":"it_IT","og_type":"article","og_title":"Ghost 1.0, Intelligenza Artificiale Interattiva &#8226; Digicult | Digital Art, Design and Culture","og_description":"[:it]Motor e Gianni Corino descrivono la loro installazione interattiva Ghost 1.0 presentata a Torino al Piemonte Share Festival[:]","og_url":"https:\/\/digicult.it\/design\/italiano-ghost-1-0-intelligenza-artificiale-interattiva\/","og_site_name":"Digicult | Digital Art, Design and Culture","article_published_time":"2005-06-05T12:00:00+00:00","article_modified_time":"2020-10-13T16:32:00+00:00","og_image":[{"width":280,"height":210,"url":"https:\/\/digicult.it\/wp-content\/uploads\/2005\/06\/ia_motor02.gif","type":"image\/gif"}],"author":"Motor","twitter_misc":{"Scritto da":"Motor","Tempo di lettura stimato":"12 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/digicult.it\/design\/italiano-ghost-1-0-intelligenza-artificiale-interattiva\/","url":"https:\/\/digicult.it\/design\/italiano-ghost-1-0-intelligenza-artificiale-interattiva\/","name":"Ghost 1.0, Intelligenza Artificiale Interattiva &#8226; Digicult | Digital Art, Design and Culture","isPartOf":{"@id":"https:\/\/digicult.it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/digicult.it\/design\/italiano-ghost-1-0-intelligenza-artificiale-interattiva\/#primaryimage"},"image":{"@id":"https:\/\/digicult.it\/design\/italiano-ghost-1-0-intelligenza-artificiale-interattiva\/#primaryimage"},"thumbnailUrl":"https:\/\/digicult.it\/wp-content\/uploads\/2005\/06\/ia_motor02.gif","datePublished":"2005-06-05T12:00:00+00:00","dateModified":"2020-10-13T16:32:00+00:00","author":{"@id":"https:\/\/digicult.it\/#\/schema\/person\/ba66ac75d5000c2c79a089c82736413e"},"breadcrumb":{"@id":"https:\/\/digicult.it\/design\/italiano-ghost-1-0-intelligenza-artificiale-interattiva\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/digicult.it\/design\/italiano-ghost-1-0-intelligenza-artificiale-interattiva\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/digicult.it\/design\/italiano-ghost-1-0-intelligenza-artificiale-interattiva\/#primaryimage","url":"https:\/\/digicult.it\/wp-content\/uploads\/2005\/06\/ia_motor02.gif","contentUrl":"https:\/\/digicult.it\/wp-content\/uploads\/2005\/06\/ia_motor02.gif","width":280,"height":210},{"@type":"BreadcrumbList","@id":"https:\/\/digicult.it\/design\/italiano-ghost-1-0-intelligenza-artificiale-interattiva\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/digicult.it\/"},{"@type":"ListItem","position":2,"name":"Ghost 1.0, Intelligenza Artificiale Interattiva"}]},{"@type":"WebSite","@id":"https:\/\/digicult.it\/#website","url":"https:\/\/digicult.it\/","name":"Digicult | Digital Art, Design and Culture","description":"Dal 2005 Digicult \u00e8 una piattaforma che esamina l&#039;impatto delle tecnologie sull&#039;arte, il design, la cultura e la societ\u00e0 contemporanea","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/digicult.it\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"it-IT"},{"@type":"Person","@id":"https:\/\/digicult.it\/#\/schema\/person\/ba66ac75d5000c2c79a089c82736413e","name":"Motor","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/digicult.it\/#\/schema\/person\/image\/","url":"https:\/\/digicult.it\/wp-content\/uploads\/2015\/12\/motor-96x96.jpg","contentUrl":"https:\/\/digicult.it\/wp-content\/uploads\/2015\/12\/motor-96x96.jpg","caption":"Motor"},"url":"https:\/\/digicult.it\/it\/author\/motor\/"}]}},"_links":{"self":[{"href":"https:\/\/digicult.it\/it\/wp-json\/wp\/v2\/posts\/9752","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/digicult.it\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/digicult.it\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/digicult.it\/it\/wp-json\/wp\/v2\/users\/89"}],"replies":[{"embeddable":true,"href":"https:\/\/digicult.it\/it\/wp-json\/wp\/v2\/comments?post=9752"}],"version-history":[{"count":3,"href":"https:\/\/digicult.it\/it\/wp-json\/wp\/v2\/posts\/9752\/revisions"}],"predecessor-version":[{"id":58803,"href":"https:\/\/digicult.it\/it\/wp-json\/wp\/v2\/posts\/9752\/revisions\/58803"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/digicult.it\/it\/wp-json\/wp\/v2\/media\/31310"}],"wp:attachment":[{"href":"https:\/\/digicult.it\/it\/wp-json\/wp\/v2\/media?parent=9752"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/digicult.it\/it\/wp-json\/wp\/v2\/categories?post=9752"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/digicult.it\/it\/wp-json\/wp\/v2\/tags?post=9752"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}