ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ. Σχεδίαση και ανάπτυξη αρχιτεκτονικής δικτύου για σύστημα έξυπνων κάμερων



Σχετικά έγγραφα
Έρευνα στα Ασύρματα Δίκτυα Αισθητήρων WSN

WIRELESS SENSOR NETWORKS (WSN)

Εφαρμογές Σειριακής Επικοινωνίας

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 2 USB και Σειριακή Επικοι- νωνία Σ Σειριακή Επικοινωνία

ΑΣΚΗΣΗ 1 (22 Νοεμβρίου 2017)

Φύλλο εργασίας 9 - Αυτόνομο ρομποτικό όχημα αποφυγής εμποδίων

Μετρήσεις και συλλογή δεδομένων (Data acquisition) με μικροελεγκτές. Εισαγωγή στο Arduino. Ηλεκτρομηχανολογικός εξοπλισμός διεργασιών

Συσκευές Τηλεπικοινωνιών και Δικτύωσης. Επικοινωνίες Δεδομένων Μάθημα 9 ο

Ενσωματωμένα Συστήματα

ΜΙΚΡΟΕΛΕΓΚΤΗΣ PICAXE 18M2

ΡΟΜΠΟΤΙΚΗ. ΕΡΓΑΣΙΑ ΠΑΝΩ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΝΧΤ ΚΑΙ ΤΑ ΠΡΩΤΟΚΟΛΛΑ ΕΠΙΚΟΙΝΩΝΙΑΣ BLUETOOTH, I2C και serial communication

WDT και Power Up timer

Αυτοματισμοί και Συστήματα Αυτομάτου Ελέγχου. Ενότητα 2

Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα

Πρότυπο Αναφοράς Open Systems Interconnection (OSI) Επικοινωνίες Δεδομένων Μάθημα 5 ο

Έλεγχος με Μικροϋπολογιστές Εργαστήριο ενσωματωμένων συστημάτων

Εγκατάσταση του Arduino IDE

Το κύκλωμα σε breadboard

1o ΕΠΑΛ- Ε.Κ. Συκεών -Τομέας: Ηλεκτρονικής, Ηλεκτρολογίας και Αυτοματισμού Εκπαιδευτικοί: Μπουλταδάκης Στέλιος Μαυρίδης Κώστας

ΕΦΑΡΜΟΓΕΣ ΤΗΛΕΠIΚΟΙΝΩΝΙΑΚΩΝ ΔΙΑΤΑΞΕΩΝ

Ενσωµατωµένα Συστήµατα

LFT169 - LFR169 ΠΟΜΠΟΣ ΚΑΙ ΔΕΚΤΗΣ ΨΗΦΙΑΚΩΝ ΚΑΙ ΑΝΑΛΟΓΙΚΩΝ ΣΗΜΑΤΩΝ

Γνωριμία με το Arduino

Υλοποίηση Τεχνολογιών έξυπνων σπιτιών

Κεφάλαιο 1.6: Συσκευές αποθήκευσης

Ethernet Ethernet ΙΕΕΕ CSMA/CD

ΔΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ Ι. Σημειώσεις Θεωρίας

Οδηγίες εγκατάστασης και χρήσης του Quartus

Μάθημα 8: Επικοινωνία Συσκευών με τον Επεξεργαστή

ΕΡΓΑΣΤΗΡΙΟ 4 ΕΙΣΑΓΩΓΗ ΣΤΟN ARDUINO: ΨΗΦΙΑΚΗ ΕΙΣΟΔΟΣ/ΕΞΟΔΟΣ

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 4 - Editor

Βασικές οδηγίες εγκατάστασης και χρήσης. Σύστημα περιπολίας GMS Αισθητήρας ανάγνωσης επιτρεπόμενη απόσταση από το σημείο ελέγχου 3-5cm.

Οδηγός χρήσης AE6000. Ασύρματος προσαρμογέας Mini USB AC580 Dual Band

Για περισσότερες πληροφορίες σχετικά με τη συμβατότητα του λογισμικού με άλλα λειτουργικά συστήματα, επικοινωνήστε με το τμήμα υποστήριξης πελατών.

Μάθημα 4.7 Θύρες περιφερειακών

Κατανεμημένα Συστήματα. Javascript LCR example

SIMATIC MANAGER SIMATIC MANAGER

TeleCost Hotel για Panasonic TDA

για τις ρυθμίσεις LabView μέσα από το κανάλι και του καλωδίου USB.

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 5. Ρυθμίζοντας τη Φορά Περιστροφής. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων

Εγχειρίδιο Ζωντανών Μεταδόσεων Υπηρεσιών Βίντεο. Πανεπιστημίου Κρήτης. Εγχειρίδιο τεχνικού μετάδοσης

ΗY335: Δίκτυα Υπολογιστών Χειμερινό Εξάμηνο Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Διδάσκουσα: Μαρία Παπαδοπούλη

ΑΡΧΙΤΕΚΤΟΝΙΚΗ HARDWARE ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

Οδηγίες για την εγκατάσταση του πακέτου Cygwin

Μάθημα 3.8 Τεχνικές μεταφοράς δεδομένων Λειτουργία τακτικής σάρωσης (Polling) Λειτουργία Διακοπών DMA (Direct Memory Access)

Λογικά σύμβολα των CPU, RAM, ROM και I/O module

Δραστηριότητα 9: Σύνδεση ΗΥ με το πολύμετρο METEX 3870D μέσω σειριακής επικοινωνίας RS232 και εφαρμογή σε LabView

Κεφάλαιο 1.5: Τα βασικά μέρη ενός υπολογιστή

Πλακέτα Arduino. 1ο ΕΠΑΛ Περάματος - 7ο ΕΚ Πειραιά

ΕΡΓΑΣΤΗΡΙΟ ΜΙΚΡΟΕΛΕΓΚΤΩΝ

Εργαστήριο «Δίκτυα Υπολογιστών Ι»

Οργάνωση Υπολογιστών (IΙI)

Προετοιμασία σύνδεσης του modem. Εγκατάσταση του Modem

Εγχειρίδιο Ζωντανών Μεταδόσεων Εξελιγμένων Υπηρεσιών Βίντεο Πανελληνίου Σχολικού Δικτύου Εγχειρίδιο τεχνικού μετάδοσης

Οδηγίες για την Διαδικασία αποθήκευσης στοιχείων ελέγχου πινάκων για επίλυση θέματος Οριοθέτησης.

Ενσωματωμένα Συστήματα

Ενημερώσεις λογισμικού Οδηγός χρήσης

Διαφορές single-processor αρχιτεκτονικών και SoCs

1. Περιεχόμενα συσκευασίας Απαιτήσεις συστήματος Budget III Web Camera Τεχνική Υποστήριξη από την Crypto...

1. Περιεχόμενα Συσκευασίας Απαιτήσεις Συστήματος Τεχνική Υποστήριξη Τεχνικά Χαρακτηριστικά... 7

Κεφάλαιο 3 Λειτουργικά Συστήματα Β ΕΠΑΛ

Μάθημα 5: To Μοντέλο Αναφοράς O.S.I.

Μάθημα 10 ο ΔΙΑΧΕΙΡΙΣΗ ΕΙΣΟΔΟΥ ΕΞΟΔΟΥ (INPUT/OUTPUT)

ΑΣΚΗΣΗ 2 (29 Νοεμβρίου 2016)

Δθαξκνγέο αζύξκαηεο ηειεκεηξίαο ζηελ αλαπηπμηαθή πιαηθόξκα Arduino

Αρχιτεκτονικές Δικτύων & Πρωτόκολλα Ι

Εφαρμογές Arduino Σεμινάριο Ηλεκτρονικού Τομέα

ΠΛΗΡΟΦΟΡΙΚH ΓΙΑ ΤΗΝ ΤEΧΝΗ Η ΕΞAΜΗΝΟ

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 1. Arduino + LabVIEW: Μέτρηση Έντασης Φωτός με Φωτοαντίσταση. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων

Εγχειρίδιο Ζωντανών Μεταδόσεων Εξελιγμένων Υπηρεσιών Βίντεο Πανελληνίου Σχολικού Δικτύου Εγχειρίδιο τεχνικού μετάδοσης

Special edition of the Technical Chamber of Greece on Video Conference Services on the Internet, 2000 INTERNET PHONE

Έλεγχος με Μικροϋπολογιστές Εργαστήριο ενσωματωμένων συστημάτων

Εισαγωγή στην Πληροφορική

Μαθαίνοντας το hardware του αναπτυξιακού

ΕΙΣΑΓΩΓΗ ΣΤΟ ARDUINO. Υποψήφιος Διδάκτωρ

SNMP ΔΙΑΧΕΙΡΙΣΗ ΔΙΚΤΥΟΥ ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ

ΜΕΛΕΤΗ ΚΑΙ ΚΑΤΑΣΚΕΥΗ ΣΥΣΤΗΜΑΤΟΣ ΜΕΤΡΗΣΗΣ ΑΤΜΟΣΦΑΙΡΙΚΩΝ ΠΑΡΑΜΕΤΡΩΝ ΠΟΥ ΕΠΗΡΕΑΖΟΥΝ ΤΗΝ ΔΙΕΝΕΡΓΕΙΑ ΑΣΤΡΟΝΟΜΙΚΩΝ ΠΑΡΑΤΗΡΗΣΕΩΝ ΚΑΙ ΜΕΤΡΗΣΕΩΝ.

Επίπεδο δικτύου IP Forwading κτλ

Λειτουργικά Συστήματα Κεφάλαιο 2 Οργάνωση Συστήματος Αρχείων 2.1 Διαχείριση Αρχείων και Σύστημα Αρχείων(File System)

Εισαγωγή στην Πληροφορική

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

ΑΝΑLOG TO DIGITAL CONVERTER (ADC)

ίκτυα υπολογιστών Στόχοι κεφαλαίου ίκτυα

ΑΣΚΗΣΗ 8 Tutorial by TeSLa Συνδεσμολογία κυκλώματος Διαδικασία Προγραμματισμού

ΠΕΡΙΕΧΟΜΕΝΑ ΚΕΦΑΛΑΙΟ I: ΕΙΣΑΓΩΓΗ ΣΤΑ ΗΛΕΚΤΡΟΝΙΚΑ

Modbus basic setup notes for IO-Link AL1xxx Master Block

Αρχές Δικτύων Επικοινωνιών. Επικοινωνίες Δεδομένων Μάθημα 4 ο

Εξωτερικές συσκευές Οδηγός χρήσης

ΔΙΑΧΥΤΑ ΚΑΙ ΕΝΣΩΜΑΤΩΜΕΝΑ ΣΥΣΤΗΜΑΤΑ

Εξωτερικές συσκευές. Οδηγός χρήσης

ZigBee. Φοιτητής: Μόσχογλου Στυλιανός Επιβλέπων καθηγητής: κ. Δοκουζγιάννης Σταύρος

Hancock. Ζωγραφάκης Ιωάννης Εξαρχάκος Νικόλαος. ΕΠΛ 428 Προγραμματισμός Συστημάτων

Λιβανός Γιώργος Εξάμηνο 2017Β

Υποστήριξη Λ.Σ. ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Εξωτερικές συσκευές Οδηγός χρήσης

Εξωτερικές συσκευές Οδηγός χρήσης

Εισαγωγή στην Αριθμητική Ανάλυση

Μάθημα 4: Πρότυπα, Πρωτόκολλα & Υπηρεσίες

Ενημερώσεις λογισμικού Οδηγός χρήσης

Barcode scanner Posiflex CD D. Motorola AP 5131 Wireless Access Point (Εγκατάσταση)

Transcript:

ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ Σχεδίαση και ανάπτυξη αρχιτεκτονικής δικτύου για σύστημα έξυπνων κάμερων Τμήμα Ηλεκτρολογων Μηχανικών και Τεχνολογίας Υπολογιστών Πανεπιστήμιο Πατρών Μάριος Χατζηγεωργίου του Λαζάρου Μαρτιος 2011 Επιβλέπων: Δ. Σερπάνος Συνεξεταστής: Γ. Καλύβας

Περίληψη Περίληψη Τα ασύρματα δίκτυα αισθητήρων (WSNs) είναι πολύ αναγνωρισμένα στις μέρες μας και γύρω από αυτά έχουν αναπτυχθεί χιλιάδες εφαρμογές που με χρήση άλλης τεχνολογίας ήταν σχεδόν ακατόρθωτες. Ένα WSN αποτελείται από κόμβους οι οποίοι είναι προγραμματισμένοι να επικοινωνούν και να συλλέγουν πληροφορίες μέσω των αισθητήρων που είναι αναρτημένοι πάνω τους. Οι πληροφορίες ή σύνολο των πληροφοριών καταλήγουν τελικά στους κόμβους που είναι προγραμματισμένοι ως τερματικοί κόμβοι ή βάσεις. Οι βάσεις είναι συνήθως συνδεδεμένες με ένα υπολογιστή και μεταφέρουν τα δεδομένα του δικτύου σε αυτόν. Τα κύρια χαρακτηριστικά των ασύρματων δικτύων αισθητήρων είναι η χαμηλή κατανάλωση ενεργείας των συσκευών-κόμβων (motes), η σταθερότητα και η απλότητα του κώδικα καθώς και η μεγάλη αξιοπιστία. Μερικές εφαρμογές των WSNs είναι για παράδειγμα η μέτρηση της υγρασίας στον τάπητα ενός γηπέδου γκολφ, η παρακολούθηση των κρίσιμων μεγεθών σε μεγάλες κατασκευές (π.χ. οι τάσεις των νημάτων μιας κρεμμαστης γέφυρας ή η παρακολούθηση της καταπόνησης των δοκών ενός ουρανοξύστη). Στα πλαίσια της διπλωματικής εργασίας αυτής παρουσιάζουμε ένα ασύρματο δίκτυο αισθητήρων όπου οι αισθητήρες είναι έξυπνες κάμερες! Παρουσιάζει μεγάλο ενδιαφέρον η μελέτη ενός τέτοιου δικτύου καθώς και η ανάπτυξη εφαρμογών γύρω από αυτό.

Περίληψη iv

Abstract Abstract Wireless Sensor Networks (WSNs) are very much recognized these days, and thousands of applications have been developed in relation to them, which, would have been impossible if other technologies were used. A WSN is made up of nodes programmed to collect information through sensors attached to them and transmit them. The information ends up finally to the nodes which are programmed as terminal nodes or base-stations. These base-stations are usually connected to a computer and transfer the data that have been retrieved from the network to it. The main features of a WSN is the low energy consumption by the node equipment (motes), the stability and simplicity of the code as well as their great reliability. Some applications of the WSNs are, for example, the measurement of humidity in a golf course, the monitoring of the crucial sizes in great constructions (e.g. the tensions of the fibers in a suspension bridge, the monitoring of the strains of girders in a skyscraper) Within the context of this thesis, we present a WSN where the sensors are smart cameras! The study of such a network presents great interest as well as the development of applications based on it.

Abstract vi

Ευχαριστίες Ευχαριστίες Θα ήθελα να ευχαριστήσω τον επιβλέπων καθηγητή μου Κ. Δημήτρη Σερπάνο για την ευκαιρία που μου έδωσε μεσα απο αυτή την εργασία να ασχοληθώ με τα αντικείμενα των ασυρμάτων δικτύων αισθητήρων και των έξυπνων καμέρων. Επίσης θα ήθελα να ευχαριστήσω τον μεταπτύχιακο φοιτητη Κ. Ανδρέα Παπαλάμπρου του οποιου η βοήθεια και συμπαρασταση ηταν πολυτιμη. Η συνεργασία μας ήταν ιδιαίτερα εποικοδομητική και οι γνώσεις που ελαβα θα με συνοδεύουν στην σταδιοδρομία μου ως ηλεκτρολόγο μηχανικό. Η εκπόνηση της συγκεκριμένης Διπλωματικής Εργασίας δε θα ήταν δυνατή χωρίς την συμπαρασταση των συμφοιτητων και πραγματικων μου φιλων. Τους ευχαριστώ για τη συνεχή και αμέριστη προσφορά τους στην προσπάθεια μου αυτή. Τέλος θα ήθελα να ευχαριστήσω τους γονείς μου Λάζαρο και Μυριάνθη για την κάθε είδους στήριξη που μου παρείχαν κατα την διάρκεια των σπουδών μου και ως ελάχιστη πράξη ευγνωμοσύνης τους αφιερώνω την εργασία αυτή η οποία αποτελεί το επιστέγασμα των σπουδών μου.

Ευχαριστίες viii

Πίνακας Περιεχομένων Πίνακας Περιεχομένων Περίληψη... iii Abstract... v Ευχαριστίες... vii Πίνακας Περιεχομένων...ix 1 1.1 1.2 1.3 1.4 1.5 1.6 Ασύρματα δίκτυα αισθητήρων...1 Χαρακτηριστικά Ασύρματων Δικτυων Αισθητήρων...2 Δομές Δικτύων WSN...3 HSNs-Heterogeneous Sensor Networks...4 TinyOS... 5 Η γλώσσα προγραμματισμού nesc...6 Υλικό ενός WSN... 10 2 2.1 2.2 2.3 2.4 2.5 2.6 2.7 Το εκπαιδευτικό πακέτο CITRIC...17 Περιγραφή Πακέτου...17 Τεχνικά Χαρακτηριστικά...18 Υλοποίηση δικτύου...21 Έξυπνες καμερες... 27 Citric user interface...28 Εργαλεία ανάπτυξης λογισμικού...29 Διαδικασία γρήγορης εγκατάστασης του περιβάλλοντος Citric....30 3 3.1 3.2 3.3 3.4 3.5 3.6 Εφαρμογές... 39 Αναγνώριση Κίνησης...39 Image Differencing...46 Κώδικας και επεξηγηση...47 Background Subtraction...53 Σύγκριση Εφαρμογών...63 Παρουσίαση αποτελεσμάτων...64 A A.1 Παράρτημα Α...I Διαδικασία εγκατάστασης TinyOS...I Ευρετήριο πινάκων και εικόνων...iii Βιβλιογραφία... V Επίλογος... VII Επισυναπτώμενα ηλεκτρονικά μέσα...ix

Πίνακας Περιεχομένων x

1 Ασύρματα Δίκτυα Αισθητήρων Ασύρματα δίκτυα αισθητήρων 1 A wireless sensor network (WSN) is a wireless network consisting of spatially distributed autonomous devices that use sensors to monitor physical or environmental conditions. These autonomous devices, or nodes, combine with routers and a gateway to create a typical WSN system. The distributed measurement nodes communicate wirelessly to a central gateway, which provides a connection to the wired world where you can collect, process, analyze, and present your measurement data. To extend distance and reliability in a wireless sensor network, you can use routers to gain an additional communication link between end nodes and the gateway. [Wikipedia]1 Ένα ασύρματο δίκτυο αισθητήρων είναι ένα ασύρματο δίκτυο που αποτελείται από χωρικά κατανεμημένες αυτόνομες συσκευές οι οποίες χρησιμοποιούν αισθητήρες για να καταγράφουν φυσικές οι περιβαλλοντικές συνθήκες. Οι κατανεμημένοι κόμβοι επικοινωνούν ασύρματα με ένα κεντρικό κόμβο-βαση, ο οποίος παρέχει σύνδεση με κάποιο ενσύρματο δίκτυο όπου μπορούμε να συλλέξουμε, να επεξεργαστούμε, να αναλύσουμε και να παρουσιάσουμε τα δεδομένα του δικτύου. Picture 1: Εμπορικό σύστημα WSN http://en.wikipedia.org/wiki/wireless_sensor_network 1 1

1 Ασύρματα Δίκτυα Αισθητήρων Χαρακτηριστικά Ασύρματων Δικτυων Αισθητήρων 1.1 Χαμηλή Κατανάλωση ενέργειας. Στις περισσότερες περιπτώσεις οι κόμβοι του δικτύου, τροφοδοτούνται με μπαταρίες οι οποίες μετά από κάποιο χρόνο διάστημα θα χάσουν την ενέργειά τους, αυτό έχει σαν αποτέλεσμα να σταματήσει η λειτουργία του δικτύου. Συνεπως όσο πιο χαμηλή είναι η κατανάλωση του κάθε κόμβου ξεχωριστά, τόσο αυξάνεται το χρονικό διάστημα λειτουργίας του δικτύου και τόσο μειώνεται το κόστος συντήρησης του. Πολλά τέτοια δίκτυα χρησιμοποιούν ανανεώσιμες πηγές ενέργειας (συνήθως ηλιακής), μια τέτοια υλοποίηση προυποθέτει την ύπαρξη ήλιου κατά την διάρκεια λειτουργίας ή την χρήση και σε αυτή την περίπτωση μπαταριών. Από την στιγμή όμως που οι κόμβοι του δικτύου υπόκεινται σε περιορισμούς μεγέθους δεν είναι εύκολη υπόθεση η χρηση ηλιακων κυψελων για ενέργεια. Αυτόνομη και προγραμματιζόμενη λειτουργία. Ο κάθε κόμβος θα πρέπει να μπορεί να λειτουργήσει αυτόνομα, δηλαδή να ξέρει πότε να πάρει μετρήσεις, και με ποιό ρυθμό, που θα στείλει τις μέτρησεις που πήρε (πχ Broadcasting σε όλους όσοι είναι στην εμβέλεια του). Ταυτόχρονα θα έχει την δυνατότητα να προγραμματίζεται δυναμικά, για παράδειγμα να μπορεί το base station να ελεγξει την λειτουργία των κόμβων διαδίδοντας στο δίκτυο καινούργια δεδομένα λειτουργίας για το κάθε κόμβο με αποτέλεσμα τον δυναμικό προγραμματισμό του δικτύου. Χαμηλό κόστος. Την δεδομένη στιγμή το κόστος των κόμβων(motes) που κυκλοφορούν στην αγορά είναι απαγορευτικό για μεγάλης κλίμακας δίκτυα διοτι ακομη δεν εχουν καταστει πληρως εμπορικα προιοντα και εχουν ακομη ερευνητικο χαρακτηρα. Για παράδειγμα εάν θέλουμε να παρακολουθήσουμε την υγρασία στον ταπητα ενως γηπεδου γκολφ θα χρειαστούμε παρα πολλους κόμβους και πολλα χρηματα για την αγορά τους, ωστοσο μια εμπεριστατωμενη ερεύνα ισως να αποδείξει ότι είναι η πιο φτηνή λύση για ενα τέτοιο εγχειρημα! Γρήγορη δημιουργία δικτύου. Τα περισσότερα δίκτυα έχουν την ικανότητα μέσα σε μερικά λεπτά να έχουν χαρτογραφούν την αρχιτεκτονική τους και να ξεκινήσουν την προγραμματιζόμενη λειτουργία τους. Αυτό βέβαια 2

1 Ασύρματα Δίκτυα Αισθητήρων είναι σχετικό διότι εξαρτάται αρκετά και από το μέγεθος του δικτύου και σίγουρα από το υλικό και λογισμικό των κόμβων. Προσαρμοστικότητα. Βασικό χαρακτηριστικό τέτοιου είδους δικτύων είναι η ικανότητα τους να προσαρμόζονται στα νέα δεδομένα του δικτύου. Για παράδειγμα η απώλεια κάποιων κόμβων δεν καταστρέφει το δίκτυο ολόκληρο διότι οι κόμβοι εχουν την ικανότητα να προσαρμόζονται και να δημιουργουν καινούριες συνδέσεις μεταξύ των για να διατηρηθεί η συνέχεια του δικτύου. Απλότητα. Οι περιορισμένοι υπολογιστικοί και ενεργειακοί πόροι των συσκευων που αποτελουν τους κομβους ενός τετοιου δικτύου απαίτουν τον σχεδιασμό απλών και αποδοτικών αλγορίθμων για την διεκπεραίωση των προγραμματισμένων διεργασιών που εκτελεί το δίκτυο. Απόδοση. Θυσιάζοντας την ταχύτητα αποστολής δεδομένων, οι κόμβοι μειώνουν τις επανεκπομπές πακέτων λόγω σφαλμάτων, αυξάνοντας με αυτό τον τρόπο την αξιοπιστία στην μετάδοση του κάθε πακέτου. 1.2 Δομές Δικτύων WSN Σύμφωνα με τα βασικά δομικά στοιχειά ενός WSN-HSN διακρίνουμε διάφορες μορφές αρχιτεκτονικής δικτύου που μπορούμε να υλοποιήσουμε ώστε να μας εξυπηρετούν ανάλογα με την εφαρμογή που θέλουμε να υλοποιήσουμε. Peer-to-Peer (Ίσο προς ίσο): Σε αυτή την τοπολογία όλοι οι κόμβοι μεταξύ τους είναι ίσοι στην ιεραρχία ο καθένας μπορεί να είναι ανά πάσα στιγμή server ή client και έχουν το δικαίωμα να επικοινωνούν όλοι μεταξύ τους άμεσα. Αποτελεί την πιο ελκυστική αρχιτεκτονική δικτύου και αναμφίβολα την πιο απαιτητική από πλευράς λογισμικού! Τοπολογία Star (αστέρα): Σε κάθε τέτοια τοπολογία υπάρχει ο κεντρικός κόμβος ο οποίος είναι ο server και γύρω του οι υπόλοιποι κόμβοι που είναι clients. Κανένας client δεν μπορεί να επικοινωνήσει άμεσα με άλλο client παρά μόνο μέσω του server. Αποτελεί την πιο απλή και κλασσική αρχιτεκτονική και ταιριάζει σε μεγάλο αριθμό εφαρμογών. 3

1 Ασύρματα Δίκτυα Αισθητήρων Τοπολογία Tree (Δέντρου): Σε αυτή την μορφή πρώτο στην ιεραρχία βρίσκουμε το root note μετά πιο κάτω από αυτό είναι τα central hub τα οποία το καθένα ξεχωριστά δημιουργεί μια δική του τοπολογία τύπου αστέρα, άρα αυτή η τοπολογία είναι ένας συνδυασμός των δύο πιο πάνω και για αυτό ονομάζεται και hybrid(υβριδικό). Mesh (Πλέγμα): αυτή η τοπολογία είναι ένα διευρυμένο p2p(peer to peer) δίκτυο. Με αυτό τον τρόπο όλοι οι κόμβοι μπορούν να επικοινωνήσουν μεταξύ τους ακόμη και οχι μόνο με τους γειτονικους τους κόμβους. Αυτό επιτυγχάνεται με διαδοχικά άλματα ( hops ). Στην περίπτωση αυτή πρέπει να λαμβάνονται μετρά για την καταστροφή πακέτων τα οποια δεν κατέληξαν στον προορισμό τους μετά απο καποιο αριθμό αλμάτων για να αποφύγουμε την επιβάρυνση του δικτύου. 1.3 HSNs-Heterogeneous Sensor Networks Η έρευνα γύρω από τα ασύρματα δίκτυα αισθητήρων επικεντρώνεται συνήθως γύρω από αισθητήρες χαμηλού εύρους ζώνης (πχ ήχου, φωτός, υγρασίας, κραδασμών, υπέρυθρους κ.α.) οι οποίοι περιορίζουν την δυνατότητα αναγνώρισης πολύπλοκων, μακροσκοπικών φυσικών φαινομένων. Αυτός ο περιορισμός μπορεί να αρθεί χρησιμοποιώντας αισθητήρες μεγάλου εύρους ζώνης όπως αισθητήρες εικόνων, για να παρέχουν οπτική αναγνώριση, κατανόηση του χώρου κ.α. Αυτή η νέα κλάση των ασυρμάτων δικτύων αισθητήρων ονομάζεται heterogeneous sensor networks (HSNs) [CITRICICDSC08]. Η ενσωματωση αισθητηρων μεγάλου εύρους ζώνης σε κόμβους συμβατικών δικτύων αισθητήρων χαμηλής ισχύος στα HSNs απαιτεί καινούριες τεχνικές επεξεργασίας των πληροφοριών εντός-δικτυου ώστε να μειωθεί ο φόρτος διακινούμενης πληροφορίας και το κόστος επικoινωνίας στο ασύρματο δίκτυο. 4

1 Ασύρματα Δίκτυα Αισθητήρων 1.4 TinyOS Το TinyOS είναι ένα ανοικτού κώδικα λειτουργικό σύστημα και είναι ίσως το πιο διαδεδομένο για ασύρματα δίκτυα αισθητήρων. Η πρώτη έκδοση παρουσιάστηκε το 2000 από το πανεπιστήμιο του Berkeley. Αυτή την στιγμή η τελευταία έκδοση είναι η 2.1.1 η οποία παρουσιάσθηκε τον Απρίλιο του 2010. Η εγκατάσταση του λειτουργικού σε κόμβους με περιορισμένους πόρους και με απαίτηση βέλτιστης κατανάλωσης ενέργειας προϋποθέτει ότι το λειτουργικό θα πρέπει: Να έιναι αρκετά μικρό σε μέγεθος μνήμης. Να είναι ικανό να ελαχιστοποιεί την κατανάλωση ενέργειας. Να είναι αξιόπιστο ( μεταφορά πακέτων, επεξεργασία κτλ) Να υποστηρίζει την δυνατότητα επαναπρογραμματισμού. Να υποστηρίζει ποικίλες εφαρμογές Να μπορεί να εφαρμόσει μιας μορφής παραλληλισμού (πολλές φορές χρειάζεται να επεξεργάζεται ένα πακέτο και ταυτόχρονα να «ακούμε» για άλλο). Το περιβάλλον για να προγραμματίσουμε ένα δίκτυο με χρήση του λειτουργικού TinyOS πρέπει να εγκατασταθεί στο λειτουργικό σύστημα του υπολογιστή μας. Στην περίπτωση της διπλωματικής αυτής χρησιμοποιείται το λειτουργικό σύστημα linux mint 9 (Isadora) το οποίο βασίζεται στο Debian. Για να εγκατασταθεί το περιβάλλον TinyOS στο λειτουργικό σύστημα του υπολογιστή μας πρέπει να ακολουθήσουμε μια συγκεκριμένη διαδικασία η οποία παρατίθεται στο παράρτημα Α. Η διαδικασία συγγραφής ενός προγράμματος που τρέχει πάνω σε TinyOS είναι αρκετά πολύπλοκη διαδικασία και αποτελεί ξεχωριστό θέμα για εκπόνηση διπλωματικής παρόλα αυτά η διαδικασία φόρτωσης ενός ήδη υπάρχοντος προγράμματος στον κόμβο ή βάση του ασυρμάτου δικτύου είναι αρκετά εύκολη διαδικασία και παρατίθεται στην ενότητα 2.7. 5

1 Ασύρματα Δίκτυα Αισθητήρων Οι εφαρμογές οι οποίες τρέχουν πάνω στο λειτουργικό TinyOS γράφονται στην γλωσσά προγραμματισμού nesc η οποία είναι μια διάλεκτος της γλωσσάς 1.5 Η γλώσσα προγραμματισμού nesc Η nesc2 σχεδιάστηκε ως προέκταση της γλώσσας C για την δημιουργία εφαρμογών, για την πλατφόρμα του TinyOS. Είναι component-based, eventdriven γλώσσα προγραμματισμού. Αυτό σημαίνει ότι τα προγράμματα αποτελούνται από components συνενωμένα μεταξύ τους, η διαδικασία με την οποία συνενώνονται τα components ονομάζεται wiring. Το δομικό στοιχείο της γλώσσας προγραμματισμού nesc είναι το component εξίσου σημαντικοί ορισμοί όμως είναι τα interfaces και το wiring. Component: Ένα component ( module ή configuraration) συγκεντρώνει τις ιδιότητες άλλων components (πχ timer, αισθητηρας, leds) σε μια δομική μονάδα που τις χρησιμοποιεί για να παράξει και να παρέχει καινούριες ιδιότητες οι οποίες μπορούν να χρησιμοποιηθούν από άλλα components. Interfaces: Ένα interface καθορίζει τον τρόπο αλληλεπίδρασης μεταξύ των components διότι στην ουσία η επικοινωνία μεταξύ των components ακολουθεί συγκεκριμένους κανονες. Modules/Configurarations: Ένα component μπορεί να είναι ένα module ή ένα configuraration. Component Module module ComponentNameC{ Configuraration configuraration ComponentNameAppC{ //signature //signature implementation{ implementation{ //implementation //implementation Network Embedded Systems C 2 6

1 Ασύρματα Δίκτυα Αισθητήρων Η υλοποίηση του module αποτελεί τον κώδικα της εφαρμογής (δήλωση μεταβλητών, υλοποίηση συναρτήσεων, κλήση συναρτήσεων) ενώ η υλοποίηση του configuraration αποτελεί το wiring της εφαρμογής όπου τα components συνενωνοται μεταξύ τους. Στο πεδίο signature δηλώνουμε τις σχέσεις του component με τα interfaces δηλαδή ποια interfaces χρησιμοποιεί και ποια παρέχει. Για το σκοπό αυτό χρησιμοποιείται η σύμβαση UserComponent.Interface -> ProviderComponent.Interface. To interface όπως παρατηρούμε είναι ο τρόπος επικοινωνίας μεταξύ των components και επίσης γίνεται αντιληπτό ότι ένα component χρησιμοποιεί κάποια interfaces και παρέχει κάποια άλλα. Η γλώσσα προγραμματισμού nesc ακολουθεί μια split-phase 3 λογική για να το πετύχει αυτό χρησιμοποιούνται τα commands και τα events. Commands: Κάθε component υλοποιεί κάποια commands τα οποία μπορεί να καλέσει ένα άλλο component μέσω του interface που συνδέει τα 2 components. Events: Αφού εκτελεστεί κάποιο command η εκτέλεσή του σηματοδοτείται από κάποιο event. Για την κατανόηση των ορισμών που δίνονται πιο πάνω θα επεξηγηθεί μια υποτυπώδης εφαρμογή γραμμένη σε nesc η οποία παρέχεται από το εκπαιδευτικό πακέτο του TinyOS. Το συγκεκριμένο πρόγραμμα αυξάνει ένα counter κατά 1 και τα 3 τελευταία bits του αριθμού απεικονίζονται στα leds της συσκευής TelosB Το TinyOS πρέπει να συμβαδίζει με τους περισσότερους αισθητήρες οι οποίοι έχουν split-phase 3 hardware έτσι υλοποιήθηκε ώστε και το software να είναι split-phase. 7

1 Ασύρματα Δίκτυα Αισθητήρων CounterToLedsApp.nc configuration CounterToLedsApp { implementation { Δήλωση των components components CounterToLeds,MainC,LedsC; χρησιμοποιούνται components new TimerMilliC() as Timer; //user.interface -> provider.interface Το interface CounterToLeds.Leds -> LedsC.Leds; χρησιμοποιεί CounterToLeds.Boot -> MainC.Boot; LedsC.Leds... CounterToLeds.Timer -> Timer; που CounterToLeds.Leds το interface CounterToLeds.nc module CounterToLeds { uses { interface Leds; interface Boot; interface Timer<TMilli>; implementation { uint8_t counter = 0; enum { PERIOD = 250, ; Δήλωση των interfaces χρησιμοποιούνται που Υλοποίηση δήλωση/αρχικοποίηση του counter Δήλωση σταθεράς PERIOD (περίοδος αύξησης του counter) event void Boot.booted() { call Timer.startPeriodic(PERIOD); Μόλις ξεκινήσει να λειτουργεί η συσκευή...καλούμε την εντολή εκκίνησης του timer (λειτουργία ανά περιόδους) event void Timer.fired() { counter++; call Leds.set(counter); Μόλις λήξει η περίοδος του timer αυξάνουμε τον counter εμφανίζουμε τον counter στα leds. Εδώ φαίνεται ξεκάθαρα η χρήση της split-phase λογικής διότι απο την στιγμή που εκτελέσαμε την εντολή call Timer.startPeriodic(PERIOD); περιμένουμε χωρίς ουσιαστικά να κάνει κάτι άλλο το πρόγραμμα μέχρι την στιγμή που θα εγερθεί το event void Timer.fired(). Αυτό είναι πολύ σημαντικό στοιχείο της γλώσσας nesc διότι με αυτό τον τρόπο επιτυγχάνεται η εξοικονόμηση σημαντικών πόρων του συστήματος και συνεπώς η εξοικονόμηση ενέργειας. 8

1 Ασύρματα Δίκτυα Αισθητήρων Tasks (διεργασίες): Οι δύο πιο πάνω συναρτήσεις commands και events είναι πάντα διεργασίες με ελάχιστο χρονικό κόστος, εκτελούν μικρές αλλά απόλυτα αναγκαίες διεργασίες. Τα υπόλοιπα υπολογιστικά κομμάτια μιας εφαρμογής που απαιτούν περισσότερο χρόνο εκτέλεσης υλοποιούνται με τα tasks τα οποία είναι λειτουργίες χαμηλότερης σημασίας για αυτό και καλούνται από commands ή events αλλά δεν εκτελούνται άμεσα από το λειτουργικό όσο υπάρχουν αλλά commands ή events να εκτελέσει. Όταν ένα task ξεκινήσει δεν μπορεί να σταματήσει από άλλο task ή σύγχρονο event (αν ένα task είναι αρκετά μεγάλο υπάρχει περίπτωση ο κόμβος να χάσει πακέτα από άλλους κόμβους στην διαδικασία εκτέλεσης του). Χρονοπρογραμματιστής: Είναι υπεύθυνος για την ομαλή λειτουργία των components έχει μια στοίβα στην οποία καταχωρεί tasks όταν καλούνται στο σύστημα γενικά ακολουθεί FIFO 4λογική και θεωρείται non-preemptive5, βέβαια αυτό δεν ισχύει εντελώς με βάση τα πιο πάνω, δηλαδή σε περίπτωση που έρθει ασύγχρονο event τότε το task διακόπτεται για να εκτελεστεί το event. Ο χρονοπρογραμματιστής θα δίνει στο επεξεργαστή tasks να εκτελέσει όσο υπάρχουν στην στοίβα όταν η στοίβα αδειάσει βάζει τον επεξεργαστή σε sleep mode. Τύποι δεδομένων: Signed Unsigned bits 16 int16_t uint16_t 8 int8_t uint8_t 32 int32_t uint32_t Table 1: nesc data types Επίσης μπορεί να χρησιμοποιηθεί και τύπος bool και όλοι οι τύποι δεδομένων της C6 FIFO first in first out: ο πρώτος που μπαίνει θα είναι και πρώτος που θα εξυπηρετηθεί. 4 Νon-preemptive : καμία διεργασία δεν διακόπτεται για να εκτελεσθεί άλλη. 5 Παρόλο που επιτρέπεται η χρήση τύπων δεδομένων της C, δεν συστήνεται διότι ο τύπος int σε 6 μια πλατφόρμα μπορεί να είναι 32 bits ενώ σε μια άλλη 16bits 9

1 Ασύρματα Δίκτυα Αισθητήρων Internal functions:όπως έχουμε αναφέρει η nesc είναι διάλεκτος της C άρα η σύνταξη και η χρήση όλων των δυνατοτήτων της C είναι δυνατή σε ένα nesc πρόγραμμα. Ας παρουμε για παραδειγμα τη δήλωση και χρήση συναρτήσεων της C. Τέτοιου είδους συναρτήσεις μπορούμε να χρησιμοποιήσουμε στο implementation του module με την ίδια σύνταξη. Όταν θέλουμε να καλέσουμε την συνάρτηση γίνεται με τον ίδιο τρόπο όπως στη C, δηλαδή απλά γράφοντας το όνομα της συνάρτησης (δεν ειναι το ιδιο με τις commands που χρειάζονται την λέξη call) και ότι παραμέτρους δέχεται. 1.6 Υλικό ενός WSN Picture 2: Crossbow TelosB platform Για να κατασκευάσουμε ένα ασύρματο δίκτυο αισθητήρων πρέπει να επιλέξουμε τις συσκευές των κόμβων σύμφωνα με τις απαιτήσεις της εφαρμογής που θα υλοποιήσουμε. Υπάρχει πληθώρα συσκευών που απευθύνονται σε διαφορετικό είδος εφαρμογών η κάθε μια. Η κύρια διαφορά μεταξύ των συσκευών-κόμβων είναι στο εύρος ζώνης και ως εκ τούτου στην ταχύτητα μετάδοσης των δεδομένων και στην κατανάλωση ενέργειας. Στα πλαίσια της διπλωματικής αυτής χρησιμοποιείται η συσκευή TelosB της εταιρίας Crossbow. Παρακάτω παρατίθεται ένας πίνακας των τεχνικών χαρακτηριστικών της συσκευής αυτής. 10

1 Ασύρματα Δίκτυα Αισθητήρων Picture 3: Block Diagram of a TelosB platform Specifications TelosB TPR2400CA Module Processor Performance 16-bit RISC Program Flash Memory 48K bytes Measurement Serial Flash 1024K bytes RAM 10K bytes Configuration EEPROM 16K bytes Serial Communications UART Analog to Digital Converter 12 bit ADC Digital to Analog Converter 12 bit DAC Other Interfaces Digital I/O,I2C,SPI Current Draw 1.8 ma ~ 5.1 μa RF Transceiver Frequency band 2400 MHz to 2483.5 MHz Transmit (TX) data rate 250 kbps RF power -24 dbm to 0 dbm Receive Sensitivity -90 dbm (min), -94 dbm (typ) Adjacent channel rejection 47 db Outdoor Range 75 m to 100 m Indoor Range 20 m to 30 m Current Draw 23 ma, 21 μa, 1 μa Electromechanical Battery 2X AA batteries User Interface USB Size 65 x 31 x 6 ( mm) Weight 23 gr Table 2: Πίνακας τεχνικών χαρακτηριστικών πλατφόρμας TelosB 11

1 Ασύρματα Δίκτυα Αισθητήρων 1.6.1 Επικοινωνία με υπολογιστή Η επικοινωνία των telos με τον υπολογιστή επιτυγχάνεται μέσω μιας θύρας USB και συγκεκριμένα μέσω ενός FTDI7 chip. Η εταιρεία παρέχει και τα κατάλληλα drivers (για linux, windows, Macintosh, BSD, windows ce) στην ιστοσελίδα τους (www.ftdichip.com). Σε περιβάλλον windows, μετά την εγκατάσταση των drivers μια συσκευή telos θα εμφανίζεται στα Windows ως μια COM port ή ως συσκευή /dev σε Linux, OSX, BSD. Άρα για να επικοινωνήσει ο υπολογιστής με την συσκευή αρκεί να χρησιμοποιήσει το port που ανάθεσε το λειτουργικό Windows στην συγκεκριμένη USB θύρα ή το όνομα του σχετιζόμενου με την συσκεύη file σε Linux, OSX, BSD.. Η συσκευή επικοινωνεί με τον υπολογιστής μεσο της USART1 του MSP430.(σε περιβάλλον Linux με την εντολή motelist το σύστημα παρουσιάζει ποιες συσκευές telos είναι συνδεδεμένες και που). 1.6.2 Προγραμματισμός συσκευής Ο προγραμματισμός γίνεται μέσω της θύρας USB που βρίσκεται ενσωματωμένη στην συσκευή. Αυτό γίνεται με μια παραλλαγμένη έκδοση του MSP430 Bootstrap Loader, το msp430-bsl, το οποίο προγραμματίζει την flash του μικροελεγκτή. Το telos είναι εφοδιασμένο με προστασία από ψευδή resets που μπορει να προκύψουν κατά την διαδικασία προγραμματισμού. Επίσης το hardware περιμένει συγκεκριμένη σειρά χαρακτήρων για να ξεκινήσει την διαδικασία προγραμματισμού. Ο προγραμματισμός του κόμβου χρησιμοποιώντας το πρόγραμμα msp430-bsl γίνεται ως εξής: Έστω το πρόγραμμα είναι στο αρχείο app.ihex και στην COM3(ή /dev/ttyusb2 σε linux) χρησιμοποιώντας της πιο κάτω εντολή με τα συγκεκριμένα flags ξεκινάει η διαδικασία: FTDI Future Technology Devices International: Είναι μια εταιρεία που κατασκευάζει chips που 7 μετατρέπουν δεδομένα από USB σε RS232 σήματα (και το αντίστροφο). 12

1 Ασύρματα Δίκτυα Αισθητήρων >msp430-bsl TelosB c 2 -r e I p app.ihex MSP430 Bootstrap Loader Version: 1.39-telos-6 Mass Erase Transmit default password Invoking BSL Transmit default password Current bootstrap loader version: 1.61 (Device ID: f16c) Changing baudrate to 38400 Program 2742 bytes programmed Reset device Χρησιμοποιώντας TinyOS η διαδικασία εγκατάστασης κάποιου προγράμματος σε ένα κόμβο γίνεται πιο απλή χρησιμοποιώντας την εντολή make TelosB install,n (όπου n είναι ο 16-bit αριθμός, ταυτότητα του κόμβου). Σε επόμενη παραγραφο παρατιθενται πιο αναλυτικά αυτές οι διαδικασίες. 1.6.3 Yποδοχή επέκτασης Στο σύστημα του telos υπάρχουν δύο υποδοχές επέκτασης (U2 και U28) και δύο ζευγάρια jumpers που καθορίζουν την λειτουργία των pins. Οι υποδοχές επεκτάσεις χρησιμοποιούνται για να μπορούμε να προσθέτουμε επιπλέον περιφερειακές συσκευές, όπως αναλογικούς αισθητήρες, οθόνες, ψηφιακά περιφερειακά κτλ. Η U2 είναι μια 10-pin IDC header και η U28 είναι 6-pin header. Η U2 δεν διαφέρει μεταξύ telosa και TelosB, παρέχει ψηφιακές/αναλογικές εισόδους/εξόδους. Η U28 υπάρχει στην δεύτερη έκδοση του telos (TelosB) και παρέχει πρόσβαση στις συγκεκριμένες λειτουργίες της δεύτερης έκδοσης. Πιο κάτω αναφέρουμε τα pins και την λειτουργία τους: 13

1 Ασύρματα Δίκτυα Αισθητήρων Picture 4: Ακροδέκτες Επέκτασης συσκεύης TelosB-U2 U2 Pin 1 Ονομασία Analog Vcc (AVcc) 2 3 4 5 6 UART8 Receive(UART0RX) Analog Input 0 (ADC0) UART Transmit(UART0TX) Analog Input 1 (ADC1) I2C9 Clock (I2C_SCL) 6 7 7 8 8 9 10 10 Shared Digital I/O 4 (GIO4) Analog Input 2 (ADC2) Exclusive Digital I/O 1 (GIO1) I2C Data (I2C_SDA) Shared Digital I/O 5 (GIO5) Analog Ground (Gnd) Analog Input 3 (ADC3) Exclusive Digital I/O 0 (GIO0) Λειτουργία Τάση τροφοδοσίας που παρέχει το telos σε μια εξωτερική συσκευή (3V) Είσοδος της UART Η πρώτη (0) αναλογική είσοδος Έξοδος της UART Η δεύτερη (1) αναλογική είσοδος Το ρόλοι που χρειάζεται ο δίαυλος I2C για να συγχρονίσει την μεταφορά δεδομένων. Κοινή ψηφιακή (4) είσοδος/έξοδος Η τρίτη (2) αναλογική είσοδος Αποκλειστική Ψηφιακή (1) είσοδος/εξοδος Δεδομένα του διαύλου I2C Κοινή ψηφιακή (5) είσοδος/εξοδος Γείωση του συστήματος Η τέταρτη (3) αναλογική είσοδος Αποκλειστική ψηφιακή (0) είσοδος/εξοδος Table 3: Πίνακας Ακροδεκτών Επέκτασης TelosB-U28 UART universal asynchronous receiver/transmitter είναι Hardware το οποίο μετατρέπει 8 παράλληλα δεδομένα σε σειριακή μορφή. I2C inter integrated Circuit είναι ένας δίαυλος επικοινωνίας μεταξύ ηλεκτρονικών συσκευών 9 14

1 Ασύρματα Δίκτυα Αισθητήρων Τα pins 6, 7, 8 και 10 έχουν διπλή σημασία (όπως φαίνεται και στον πίνακα), δηλαδή για παράδειγμα ανάλογα με την εφαρμογή που καλείτε να υλοποιήσει το συγκεκριμένο telos μπορεί το pin 10 να είναι ή αναλογική είσοδος ή ψηφιακή I/O (Το συγκεκριμένο pin εάν θα χρησιμοποιηθεί για ψηφιακό I/O τότε θα πρέπει να αντικατασταθεί η αντίσταση R14 με μια άλλη μηδενική αντίσταση για να ενεργοποιηθεί η είσοδος στον μικροελεγκτή. Επίσης η R16 θα πρέπει να αντικατασταθεί με μηδενική αντίσταση για να ενεργοποιηθεί και η GIO1. Σε περίπτωση που ενεργοποιήθηκαν τα ψηφιακά GIO0 και GIO1 τότε εάν ο χρήστης αλλάξει Mode και προσπαθήσει να διαβάσει αναλογικές εισόδους τα αποτελέσματα δεν θα είναι σωστά.) Picture 5: Ακροδέκτες Επέκτασης συσκεύης TelosB-U28 U28 Pin 1 1 2 2 3 3 4 4 5 6 Ονομασία Analog Input 6 (ADC0) DAC0 Analog Input 7 (ADC7) DAC 1 / SVS in Exclusive Digital I/O 2 (GIO2) Timer A Capture (TA1) Exclusive Digital I/O 3 (GIO3) External DMA trigger (DMAE0) User Interrupt (UserInt) Reset Λειτουργία Η πέμπτη (6) αναλογική είσοδος Αναλογική έξοδος Η έκτη (5) αναλογική είσοδος Αναλογική έξοδος / supply voltage supervisor Αποκλειστική ψηφιακη είσοδος/έξοδος Ρολόι Α Αποκλειστική ψηφιακή είσοδος/εξοδος Εξωτερικός έλεγχος του direct memory access Εξωτερικό interrupt Εξωτερικό reset Table 4: Πίνακας Ακροδεκτών Επέκτασης TelosB-U2 15

1 Ασύρματα Δίκτυα Αισθητήρων Επιπλέον παρέχεται ενας ξεχωριστός supply voltage supervisor στην θέση U7 και αποτελείται από 2-pins: Picture 6: Ακροδέκτες Επέκτασης συσκεύης TelosB-U7 Pin 1 1 Ονομασία Analog Input 7 (ADC7) DAC 1 /SVS In 2 SVS out U7 Λειτουργία Αναλογική είσοδος Αναλογική έξοδος / supply voltage supervisor είσοδος Supply voltage supervisor έξοδος. Table 5: Πίνακας Ακροδεκτών Επέκτασης TelosB-U7 16

2 Το Εκπαιδευτικό Πακέτο CITRIC Το εκπαιδευτικό πακέτο CITRIC 2 Στα πλαίσια αυτής της διπλωματικής εργασίας ασχοληθήκαμε με την ανάπτυξη εφαρμογής αναγνώρισης κίνησης για σύστημα ασυρμάτων έξυπνων καμερων. Η διπλωματική βασίζεται στο ερευνητικό πακέτο CITRIC_0.85 το οποίο είναι ένα πακέτο υλικού και λογισμικού που περιλαμβάνει σχεδόν ότι χρειαζόμαστε για την υλοποίηση τέτοιων εφαρμογών. 2.1 Περιγραφή Πακέτου Το εκπαιδευτικό πακέτο CITRIC έχει ως στόχο την παρουσίαση και εκμάθηση ενός συστήματος ασυρμάτου δικτύου αισθητήρων όπου οι αισθητήρες είναι έξυπνες κάμερες (αισθητήρες εικόνων). Το πακέτο αναπτύχθηκε στο πανεπιστήμιο του Berkeley στο τμήμα ηλεκτρολόγων μηχανικών και επιστήμης υπολογιστών 10. Picture 7: Tυπική αρχιτεκτονική ενος ασύρματου δικτύου αισθητήρων 10 http://www.eecs.berkeley.edu/research/projects/data/105692.html 17

2 Το Εκπαιδευτικό Πακέτο CITRIC Το κεντρικό στοιχείο του πακέτου αυτού είναι μια πλακέτα που ενσωματώνει μια κάμερα και ένα μικρουπολογιστικο σύστημα η οποία μπορεί να αναρτηθεί πάνω από οποιονδήποτε κόμβο ασυρμάτου δικτύου αισθητήρων για να δημιουργηθεί ένας κόμβος-καμερα (camera mote). Ο σχεδιασμός αυτός καθιστά δυνατή τη επεξεργασία των πληροφοριών που λαμβάνονται από την κάμερα μέσα στο δίκτυο πριν αυτές αρχίσουν να μεταδίδονται μεταξύ των κόμβων του δικτύου ούτως ώστε να μην επιβαρύνονται ο πόροι επικοινωνίας του δικτύου. Μέχρι τώρα τα δίκτυα καμερων διακινούσαν μεγάλο όγκο πληροφορίας και η επεξεργασία των εικόνων γινόταν αφού τα δεδομένα καταλήξουν όλα σε κάποιον υπολογιστή που κάνει την επεξεργασία αυτή. Με λίγα λόγια η ιδέα είναι να αποκεντρωθεί η διαδικασία της επεξεργασίας των πληροφοριών σε ένα τέτοιο δίκτυο και να διαμοιραστεί και μεταξύ των κόμβων του δικτύου και στο σημείο όπου λαμβάνονται οι πληροφορίες. Παρέχεται επίσης μια εφαρμογή γραμμένη σε γλώσσα προγραμματισμού C++ η οποία αποτελεί την διεπαφή μεταξύ του δικτύου και του υπολογιστή καθώς και την διεπαφή μεταξύ του υπολογιστή και του χρήστη. Επίσης παρέχονται ειδικές βιβλιοθήκες για την ανάπτυξη εφαρμογών στην γλώσσα προγραμματισμού C οι οποίες αξιοποιούν τις δυνατότητες του μικρουπολογιστικου συστήματος και της κάμερας καθώς και ο compiler ο οποίος είναι απαραίτητος για την δημιουργία περισσότερων τέτοιων εφαρμογών. 2.2 Τεχνικά Χαρακτηριστικά Η πλατφόρμα CITRIC αποτελείται από την πλακέτα με την κάμερα αναρτημένη πάνω σε ένα απλό κόμβο ενός WSN. Σε αυτό το σημείο πρέπει να αναφερθεί ότι το εκπεδευτικο πακέτο προτείνει την πλατφόρμα tmote sky, στην περίπτωση της διπλωματικής αυτής όμως χρησιμοποιείται η πλατφόρμα TelosB της Crossbow. Πάρα το γεγονός ότι έχουμε διαφορετική πλατφόρμα το σύστημα λειτουργεί κανονικά και στα πλαίσια που περιγράφουν οι κατασκευαστές, 18

2 Το Εκπαιδευτικό Πακέτο CITRIC γεγονός το οποίο επιβεβαιώνει τους ισχυρισμούς τους ότι η πλακέτα με την κάμερα μπορεί να αναρτηθεί πάνω από ένα τυχαίο, υφιστάμενο WSN. 2.2.1 Citric cameraboard Η πλακέτα με την κάμερα αποτελείται από την πλακέτα του επεξεργαστή (διαστάσεων 4.6*5.8 cm) και την αποσπωμενη ψηφιακή κάμερα (ή αισθητήρα εικόνας). Ο σχεδιασμός του cameraboard είναι τέτοιος ώστε να ελαχιστοποιεί το μέγεθος, την κατανάλωση ενέργειας καθώς και το κόστος κατασκευής. Picture 8: Citric cameraboard Χρησιμοποιήθηκε ο μικροεπεξεργαστής Intel PXA270 ο οποίος μπορεί να λειτουργήσει σε συχνότητα εως 624 MHz και διαθέτει 256 kb εσωτερικής στατικής μνήμης RAM καθώς και ένα βοηθητικό MMX επεξεργαστή κατάλληλο για εφαρμογές πολυμέσων. Το πλεονέκτημα του επεξεργαστή είναι ότι είναι μεταβλητής τάσης και συχνότητας λειτουργίας γεγονός που τον καθιστά πολύ οικονομικό από πλευράς κατανάλωσης ενεργείας και κατάλληλο για το πακέτο CITRIC. O επεξεργαστής συνδέεται σε μια εξωτερική μνήμη SDRAM μεγέθους 64 ΜB και σε μια 16ΜΒ εξωτερική μνήμη NOR Flash. Η RAM χρησιμοποιείται για 19

2 Το Εκπαιδευτικό Πακέτο CITRIC την αποθήκευση εικόνων κατά την διάρκεια της επεξεργασίας ενώ η Flash χρησιμοποιείται για την αποθήκευση κώδικα. Picture 9: Block Diagram of Citric cameraboard Για την τροφοδοσία χρησιμοποιείται το ολοκληρωμένο κύκλωμα διαχείρισης ισχύος NXP PCF50606. Το cameraboard μπορεί να τροφοδοτείται από 4 ΑΑ μπαταρίες ή από μετασχηματιστή 5V ή από καλώδιο USB. 2.2.2 Citric mote Όταν συνδέσουμε το cameraboard πάνω από ένα mote (πχ TelosB) δημιουργούμε ένα Citric mote. Oι κόμβοι των WSNs χρησιμοποιούν το πρωτόκολλο IEEE 802.15.4 που είναι γνωστό και ως ZigBee. Λόγω του χαμηλού εύρους ζώνης του πρωτοκόλλου αυτού, που είναι απαραίτητο για την χαμηλή κατανάλωση ενέργειας των WSN, έχει μεγάλη σημασία η επεξεργασία των δεδομένων(εικόνων) που λαμβάνονται από την κάμερα πριν αυτά μεταδοθούν μεσώ του δικτύου 20

2 Το Εκπαιδευτικό Πακέτο CITRIC Picture 10: Citric mote H κατανάλωση ενεργείας είναι σχετικά σταθερή ακόμα και όταν η τάση των μπαταριών αρχίσει να πέφτει με το πέρασμα του χρόνου. Υπολογίζεται ότι μπορούν να αντέξουν 16 ώρες συνεχούς λειτουργίας. 2.3 Υλοποίηση δικτύου Για να υλοποιήσουμε το δίκτυο πρέπει να εγκαταστήσουμε στις συσκευές TelosB τα παρεχόμενα από το πακέτο Citric προγράμματα τα οποία υλοποιήθηκαν σε γλώσσα προγραμματισμού nesc. Ο τρόπος με τον οποίο μπορούμε να εγκαταστήσουμε τα προγράμματα στις συσκευές παρατίθεται στην ενότητα Διαδικασία γρήγορης εγκατάστασης του περιβάλλοντος Citric. Από το πακέτο παρέχονται 2 προγράμματα το ένα εγκαθίσταται στις συσκευές που θα αποτελέσουν τους κόμβους του δικτύου και το άλλο στις συσκευές που θα αποτελέσουν τους σταθμούς βάσης του δικτύου. 21

2 Το Εκπαιδευτικό Πακέτο CITRIC Αξίζει να επισημάνουμε ότι τα προγράμματα αυτά παραβιάζουν μερικές βασικές αρχές της γλώσσας προγραμματισμού nesc. Ο λόγος που συμβαίνει αυτό είναι διότι η λογική του δικτύου έξυπνων καμέρων είναι διαφορετική από την λογική των δικτύων για τα οποία κατασκευάστηκε η γλώσσα nesc. Η διαφορά των 2 δικτύων έγκειται στο γεγονός ότι σε αντίθεση με τους αισθητήρες χαμηλού εύρους ζώνης (υγρασίας, φωτός, καπνού) οι οποίοι είναι αναλογικά κυκλώματα και παρέχουν μια συνεχή τιμή στους ακροδέκτες τους σαν αποτέλεσμα της μέτρησης που λαμβάνουν, οι κάμερες που χρησιμοποιήθηκαν στην εφαρμογή αυτή παρέχουν πληροφορία στο δίκτυο η οποία δεν είναι πάντα διαθέσιμη στην δικτυακή συσκευή TelosB. Με άλλα λόγια δεν αποφασίζει η συσκευή TelosB πότε θα στείλει ένα πακέτο στο δίκτυο αλλά ο επεξεργαστής που βρίσκεται στο cameraboard. Επίσης λόγω της περιορισμένης μνήμης των συσκευών TelosB υλοποιούνται κάποιες λογικές δομές ουρών στην μνήμη του cameraboard οι οποίες αποθηκεύουν τα υπο μετάδοση πακέτα. Λόγω της ύπαρξης των πιο πάνω ιδιαιτεροτήτων το πρόγραμμα λειτουργίας των συσκευών που αποτελούν τους κόμβους χρησιμοποιεί την μέθοδο του polling για να ακούει συνεχώς αν η κάμερα έχει κάποιο πακέτο προς μετάδοση. Η διαδικασία του polling είναι κάπως παράνομη σύμφωνα με την λογική της γλώσσας προγραμματισμού nesc διότι δεσμεύει πόρους του συστήματος, δεν ακολουθεί την split-phase λογική της γλώσσας, και έχει επίσης επιπτώσεις στην κατανάλωση ενέργειας. Όλα όσα αναφέρονται πιο πάνω δεν έχουν ιδιαίτερες επιπτώσεις στο πρόγραμμα του σταθμού βάσης διότι αυτό τροφοδοτείται από τον υπολογιστή στον οποίο βρίσκεται συνδεδεμένη η συσκευή Παρακάτω παρατίθεται μια ανάλυση του προγραματος που τρέχει στους κόμβους του δικτύου. 22

2 Το Εκπαιδευτικό Πακέτο CITRIC CitricMoteP.nc #include #include #include #include #include "printf.h" "AM.h" "Serial.h" "citric_packet.h" "TimeSyncMsg.h" #ifndef UART_WAIT_DELAY #define UART_WAIT_DELAY 100 #endif #ifdef NOPRINTF #define printf(...) #define printfflush() #endif module CITRICMoteP{ uses { /* App Interfaces */ interface Boot; interface Timer<TMilli> as WaitTimer; interface Leds; /* Radio Interfaces */ interface SplitControl as RadioControl; interface AMSend as RadioSend; interface Receive as RadioReceive; interface Packet as RadioPacket; interface AMPacket as RadioAMPacket; interface PacketLink as RadioLink; /* Serial interface interface interface interface interface (UART0) Interfaces */ SplitControl as SerialControl; AMSend as UartSend; Receive as UartReceive; Packet as UartPacket; AMPacket as UartAMPacket; Συμπεριληψη απαραίτητων βιβλιοθηκών Ορισμος σταθερας Delay Ορισμος συναρτησεων C Δήλωση των interfaces που χρησιμοποίει το Component CITRICmoteP. Interfaces που χρησιμοποιούνται ασυρματη μεταδοση πακέτων για την Interfaces που χρησιμοποιούνται για την μεταδοση πακέτων απο την καμερα προς το TelosB /* Shared Resource Arbitration Interfaces */ interface Resource as UartResource; /* MsgQueue Interfaces*/ interface Init as UartQueInit; interface MsgQueue as UartQue; implementation { message_t* message_t* message_t am_addr_t uint8_t Interfaces που χρησιμοποιούνται υλοποιηση λογικων ουρών. Υλοποίηση εφαρμογής g_radio_msg; g_msg_uart; g_msg_signal; g_radio_addr; g_radio_len; task task task task task void void void void void radiosendtask(); uartquery(); queryloop(); retransquery(); radiosend(); void void void void Start(); Init(); attatchtimesync(uint8_t* payload); PrintGlobalTime(); Δήλωση μεταβλητων Δήλωση συναρτησεων Δήλωση συναρτήσεων C void Init() { call UartQueInit.init(); Υλοποιηση internal συναρτησης Init() Εκτελεση command void Start() { Υλοποιηση internal συναρτησης Start() 23 για την

2 Το Εκπαιδευτικό Πακέτο CITRIC post uartquery(); Εκτελεση command event void Boot.booted(){ Init(); call RadioControl.start(); Event το οποιο σηματοδοτει οτι αναψε η συσκευη. Γινεται κλήση της internal συναρτησης init() και της εντολής ΡadioControl.start() event void RadioControl.startDone(error_t error) { if(error == SUCCESS) { call SerialControl.start(); else { call RadioControl.start(); Event το οποιο σηματοδοτεί την εκκινιση του Radio...σε περιπτωση λαθους επιμενουμε μεχρι να λειτουργησει αλλιως εκτελουμε το command για εκκινηση του serial (camera<->telosb) event void SerialControl.startDone(error_t error) { if(error == SUCCESS) { Start(); else { call SerialControl.start(); event void RadioControl.stopDone(error_t error) { Event το οποιο σηματοδοτεί την εκκινιση του Serial...σε περιπτωση λαθους επιμενουμε μεχρι να λειτουργησει αλλιως εκτελουμε την internal συναρτηση Start(); Event που σηματοδοτει το σβησιμο του Radio event void SerialControl.stopDone(error_t error) { Event που σηματοδοτει το σβησιμο του Serial event message_t *UartReceive.receive(message_t *msg, void *payload, uint8_t len) { uint8_t cb_type; Οταν λαβουμε πακέτο απο την camera call WaitTimer.stop(); cb_type = CBPKT_GET_TYPE(payload); if(cb_type == CB_TYPE_NOOUTGOING) { post uartquery(); else { g_radio_msg = msg; g_radio_len = call UartPacket.payloadLength(msg); g_radio_addr = call UartAMPacket.destination(msg); post radiosendtask(); call UartResource.release(); εξεταζουμε τι ειδους πακέτο ειναι αν δεν ειναι εξερχομενο πακετο βαζουμε το task uartquery στην ουρα του χρονοπρογραμματιστή αλλιως βαζουμε το task radiosendtask στην ουρα του χρονοπρογραμματιστή για να σταλεί το πακέτο Απελευθέρωση των πόρων της Uart return msg; task void uartquery() { g_msg_uart = call UartQue.Deque(); call UartResource.request(); Tο task uartquery αφαιρει ενα πακέτο απο την ουρα των εισερχομένων πακέτων και το προωθει για επεξεργασια event void UartResource.granted(){ post queryloop(); κλήση του task queryloop task void queryloop() { uint8_t len; am_addr_t addr, src; error_t err; uint8_t* payload; message_t* msg; task queryloop δήλωση απαραίτητων μεταβλητών 24

2 Το Εκπαιδευτικό Πακέτο CITRIC if(g_msg_uart!= NULL && call RadioAMPacket.type(g_msg_uart) == HANDLERID_CITRIC) { //normal outgoing packet len = call RadioPacket.payloadLength(g_msg_uart); addr = call RadioAMPacket.destination(g_msg_uart); src = call RadioAMPacket.source(g_msg_uart); msg = g_msg_uart; else { //if there's no incoming message, just send signal msg = &g_msg_signal; len = CBPKT_HEADER_LENGTH; addr = TOS_NODE_ID; src = TOS_NODE_ID; payload = call UartPacket.getPayload(msg, len); CBPKT_SET_TYPE(payload, CB_TYPE_NOINCOMING); CBPKT_SET_ACTUALSRCID(payload, TOS_NODE_ID); call UartAMPacket.setSource(msg, src); Αν υπάρχει πακέτο προς μετάδοση απο την κάμερα θετουμε τις καταλληλες τιμές στις μεταβλητές για να μεταδοθεί Αν δεν υπάρχει καποιο εισερχόμενο πακέτο (απο τον basestation) θετουμε τις καταλληλες τιμές στις μεταβλητές στην ουσια δεν γινεται τιποτα Στελνουμε το πακέτο στην UART err = call UartSend.send(addr, msg, len); if(err!= SUCCESS) { post queryloop(); else { call Leds.led2Toggle(); call WaitTimer.startOneShot(UART_WAIT_DELAY); Σε περιπτωση λαθους επαναλαμβανεται το task queryloop Αλλιως αναβοσβήνει το led2 κατα την αναμονη Event που σηματοδοτει η αποστολή πακετου event void UartSend.sendDone(message_t* msg, error_t error) { event void WaitTimer.fired() { printf("retrans\n"); printfflush(); post retransquery(); task void retransquery() { error_t err; uint8_t* payload; payload = call UartPacket.getPayload(&g_msg_signal, CBPKT_HEADER_LENGTH); CBPKT_SET_TYPE(payload, CB_TYPE_RETRANSREQ); Εαν δεν μεταδοθει το πακέτο σε ενα χρονικό διαστημα καλουμε το task retransquery task retransquery Αν υπάρξει προβλημα με την αποστολη του πακέτου επαναλαμβανεται το task retransquery μετα απο κάποιο χρονικό διάστημα err = call UartSend.send(0, &g_msg_signal, CBPKT_HEADER_LENGTH); if(err!= SUCCESS) { post retransquery(); else { call WaitTimer.startOneShot(UART_WAIT_DELAY); 25

2 Το Εκπαιδευτικό Πακέτο CITRIC task void radiosendtask() { call RadioLink.setRetries(g_radio_msg, 20); call RadioLink.setRetryDelay(g_radio_msg, 200); Οταν προκειται να στειλουμε ενα πακετο απο το radio προσπαθουμε καθε 200 ms για 20 φορες post radiosend(); task void radiosend() { error_t err; Αποστολή πακέτου απο το radio err = call RadioSend.send(g_radio_addr, g_radio_msg, g_radio_len); if (err == SUCCESS) { else { post radiosend(); event void RadioSend.sendDone(message_t* msg, error_t error){ if(msg == g_radio_msg) { call Leds.led0Toggle(); Σε περιπτωση επιτυχους αποστολής απο το radio αναβοσβήνει το led0 και επιστρεφουμε στο task uartquery post uartquery(); event message_t* RadioReceive.receive(message_t *msg, void *payload, uint8_t len){ if(call UartQue.isFull() == TRUE) return msg; else return call UartQue.Enque(msg); Σε περιπτωση παραλαβής πακέτου απο το radio (basestation) βαζουμε το πακέτο στην ουρα των εισερχομένων αν δεν υπαρχει χωρος... return msg; Στην ουσία το πρόγραμμα που τρέχει στον κάθε κόμβο του δικτύου υλοποιεί ενα network adapter ο οποίος περιμένει την κάμερα για εξερχόμενα πακέτα και την ενημερώνει για τυχών εισερχόμενα πακέτα. Κατι παρόμοιο υλοποιείται και για τον σταθμό βάσης. 26

2 Το Εκπαιδευτικό Πακέτο CITRIC 2.4 Έξυπνες καμερες...a smart camera is defined as a vision system which, in addition to image capture circuitry, is capable of extracting application-specific information from the captured images, along with generating event descriptions or making decisions that are used in an intelligent and automated system. [Belbachir11] Σύμφωνα με τον πιο πάνω ορισμό οι κάμερες που χρησιμοποιούμε μπορούν πράγματι να χαρακτηριστούν έξυπνες διότι πέρα από την ικανότητα τους να λαμβάνουν εικόνες μπορούν να εξάγουν πληροφορίες από αυτές. Τις πληροφορίες αυτές τις χρησιμοποιούν για να λάβουν κάποιες αποφάσεις σχετικά με την εφαρμογή την οποία υλοποιούν. Μερικές από τις πιο γνωστές εφαρμογές των έξυπνων καμερών είναι οι εξής : Βιομετρική αναγνώριση και έλεγχος πρόσβασης (πχ αναγνώριση ίριδας οφθαλμού) Μέτρηση γεωμετρικών διαστάσεων εξ'αποστασεως Αναγνώριση κωδικών (πχ barcodes, qr-codes) Καθοδήγηση ρομποτικών συσκευών Παρακολούθηση χώρων και εντοπισμός συμβάντων (εντοπισμός εισβολέων, φωτιάς, καπνού κλπ) Αναγνώριση και καταμέτρηση αντικειμένων Αναγνώριση κίνησης Όταν έχουμε ένα σύστημα έξυπνων καμερων που σχηματίζει ένα δίκτυο το όφελος από το γεγονός ότι οι κάμερες είναι έξυπνες είναι διπλό. Είναι το όφελος της εφαρμογής που μπορεί να υλοποιηθεί και επίσης είναι το γεγονός ότι μπορούμε, αντί να διακινούμε τις εικόνες μέχρι το σημείο που θα επεξεργαστούν και να επιβαρύνουμε με αυτό τον τρόπο το δίκτυο, να τις επεξεργαζόμαστε στο σημείο όπου λαμβάνονται και να διακινούμε μόνο την χρήσιμη πληροφορία που 11 Ahmed Nabil Belbachir-Smart Cameras 27

2 Το Εκπαιδευτικό Πακέτο CITRIC θα εξάγουμε από την επεξεργασία. Αυτή είναι η κεντρική ιδέα στην οποία βασίζεταί ο σχεδιασμός του πακέτου CITRIC. 2.5 Citric user interface Το πακέτο citric περιλαμβάνει επίσης κάποιο λογισμικό γραμμένο σε γλωσσά προγραμματισμού C++ το οποίο είναι η διεπαφή μεταξύ του δικτύου των καμερων όπως επίσης και η διεπαφή μεταξύ του υπολογιστή και του χρήστη. Το πρόγραμμα έχει την ονομασία citric_server και αναπτύχθηκε στο MS Visual Studio. Πρέπει να τονιστεί ότι το λογισμικό αυτό δεν αποτελεί κεντρικό σημείο επεξεργασίας των δεδομένων αλλά παρουσίασης των πληροφοριών. Η επεξεργασια των δεδομενων γινεται στους κομβους του δικτυου και συγκεκριμένα στον επεξεργαστη του cameraboard. Το λογισμικό αυτό διαχειρίζεται πακέτα επικοινωνίας μεταξύ των κόμβων, του υπολογιστή αλλά υποστηρίζει και την σύνδεση μέσω του διαδικτύου για κάποιον που θέλει να συνδεθεί. Γνωρίζει ανά πάσα στιγμή την κατάσταση των κόμβων και επίσης μας παρέχει την δυνατότητα να αλλάξουμε τις παραμέτρους των κόμβων. Στο ήδη υπάρχον λογισμικό μπορεί εύκολα να προστεθούν επιπλέον λειτουργίες επεκτείνοντας τον υφιστάμενο κώδικα. Ο server δέχεται τις πληροφορίες από το ασύρματο δίκτυο μέσω μιας σειριακής θύρας και διανεμει τις καταλληλες πληροφορίες στην καταλληλη εφαρμογη που τρεχει εκεινη την στιγμή. Στην περίπτωση που έχουμε σύνδεση στον server μέσω TCP/IP από κάποιο client τότε μπορούμε να μεταδώσουμε και πληροφορίες προς αυτόν. Το λογισμικό του server ακολουθεί μια δομή που αποτελείται από 3 μπλοκ όπως φαίνεται πιο κάτω [MOTE COMMUNICATION] <-> [TASK MANAGING] <-> [CLIENT COMMUNICATION ] κάθε μπλοκ επικοινωνεί αμφίδρομα με το γειτονικό του αλλά με χρήση διαφορετικού πρωτοκόλλου. 28

2 Το Εκπαιδευτικό Πακέτο CITRIC Για την επέκταση του κώδικα αυτού ώστε να μπορούμε να παρουσιάσουμε τις πληροφορίες που λαμβάνονται από μια καινούρια εφαρμογή του cameraboard αρκεί να αλλάξουμε τον κώδικα που βρίσκεται στα αρχεία Xmain.cpp, _UserTask.cpp και _UserTask.h. Παράδειγμα για την τροποποίηση αυτού του αρχείου δίνεται στην ενότητα 3.5 Παρουσίαση Αποτελεσμάτων όπου τροποποιείται ο κώδικας του αρχείου _UserTask.cpp για την παρουσίαση και αποθήκευση των δεδομένων 2 διαφορετικών εφαρμογών. 2.6 Εργαλεία ανάπτυξης λογισμικού Στο πακέτο περιλαμβάνονται κάποια εργαλεία που έχουν ως στόχο την διευκόλυνση του χρήστη στην ανάπτυξη εφαρμογών για το cameraboard. Τα εργαλεία αυτά είναι ο compiler arm-linux και κάποια matlab scripts. Επίσης περιλαμβάνονται κάποια header files και κάποιες έτοιμες συναρτήσεις στην γλώσσα προγραμματισμού C που χρειάζονται για την συγγραφή ενός προγράμματος που θα τρέχει στο cameraboard. Με χρήση των πιο πάνω εργαλείων η συγγραφή ενός προγράμματος γίνεται πολύ ευκολότερη παρά να προσπαθούσαμε να το κατασκευάσουμε από το μηδέν. Επίσης στο CD του πακέτου citric περιγράφεται η δομή των μεταδιδόμενων πακέτων. Στην επόμενη παράγραφο περιγράφεται αναλυτικά ο τρόπος με τον οποίο οργανώνουμε το περιβάλλον ανάπτυξης λογισμικού για τις κάμερες στα πλαίσια ενός οδηγού εκμάθησης των δυνατοτήτων του πακέτου CITRIC. 29

2 Το Εκπαιδευτικό Πακέτο CITRIC 2.7 Διαδικασία γρήγορης εγκατάστασης του περιβάλλοντος Citric Στην παράγραφο αυτή παρατίθεται ένας οδηγός γρήγορης εγκατάστασης του εκπαιδευτικού πακέτου CITRIC σε περιβάλλον του λειτουργικού συστήματος linux mint 9 και σύμφωνα με το πιο κάτω σχήμα. Picture 11: Diagram of Citric configuration Βήμα 1ο : Ετοιμασία του cameraboard Κατ' αρχήν πρέπει να προετοιμάσουμε το cameraboard ώστε να επικοινωνήσει με τον υπολογιστή μας καθώς και με το TelosB. Ένα citric-mote μπορεί να λειτουργήσει ειται λαμβάνοντας τροφοδοσία από το usb ή από μπαταρίες, αυτό καθορίζεται σύμφωνα με την θέση του διακόπτη στην πάνω αριστερή γωνιά του cameraboard. Στην εικόνα φαίνεται το cameraboard με τον διακόπτη σε θέση για να λαμβάνει τροφοδοσία από το usb. Για να εκκινήσουμε το cameraboard πατάμε το λευκό κουμπί που φαίνεται στην φωτογραφία με την ένδειξη power-on. 30

2 Το Εκπαιδευτικό Πακέτο CITRIC Picture 12: Citric mote Από την στιγμή που συνδέεται στον υπολογιστή το cameraboard αναγνωρίζεται σαν συσκευή usb. Στο λειτουργικό σύστημα linux ανάλογα με το πόσες usb συσκευές είναι συνδεδεμένες στον υπολογιστή θα αναγνωριστεί σαν /dev/ttyusbn ( όπου n-1 o αριθμός των usb συσκευών που ήταν από πριν συνδεδεμένες στον υπολογιστή, ξεκινώντας το μέτρημα από το 0! ). Αν δεν υπάρχει καμιά συνδεδεμένη συσκευή usb τότε το cameraboard θα αναγνωρίζεται ως /dev/ttyusb0. Η πληροφορία αυτη θα χρειαστεί κατά την ετοιμασία του προγράμματος minicom το οποίο χρησιμοποιείται για την επικοινωνία του cameraboard με τον υπολογιστή μας. Για την σειριακή επικοινωνία του cameraboard με τον υπολογιστή χρειαζόμαστε το πρόγραμμα minicom. Για την εγκατάσταση του προγραμματος στον υπολογιστη αρκεί να δώσουμε την εντολή sudo apt-get install minicom στο terminal. minicom Αφού εγκατασταθεί το πρόγραμμα με την εντολή -s θα εμφανιστεί η πιο κάτω οθόνη και τότε μπορούμε να καθορίσουμε τις παραμέτρους λειτουργίας του προγράμματος. 31

2 Το Εκπαιδευτικό Πακέτο CITRIC +-----[configuration]------+ Filenames and paths File transfer protocols Serial port setup Modem and dialing Screen and keyboard Save setup as dfl Save setup as.. Exit Exit from Minicom +--------------------------+ Επιλέγουμε το serial port setup και αλλάζουμε τις ρυθμίσεις σύμφωνα με την πιο κάτω εικόνα +---------------------------------------------------------------+ A Serial Device : /dev/ttyusb0 B - Lockfile Location : /var/lock C Callin Program : D - Callout Program : E Bps/Par/Bits : 115200 8N1 F - Hardware Flow Control : No G - Software Flow Control : No Change which setting? +---------------------------------------------------------------+ Επίσης πρέπει να σιγουρευτούμε ότι έχουμε εγκατεστημένο στον υπολογιστή μας το zmodem protocol το οποίο χρησιμοποιείται για την αποστολή και λήψη δεδομένων από και προς το cameraboard. Αν δεν είναι εγκατεστημένο δίνουμε στο terminal την εντολή sudo apt-get install lrzsz Βήμα 2ο: Ετοιμασία του κόμβου Ακολούθως προγραμματίζουμε την συσκευή TelosB σαν κόμβο του δικτύου υποθέτοντας ότι το περιβάλλον TinyOS 2.x είναι επιτυχώς εγκατεστημένο στον υπολογιστή μας. Αντιγράφουμε το φάκελο CITRIC_0.85 που βρίσκεται στο CD στο home directory του υπολογιστή μας. Δημιουργούμε στο home directory του υπολογιστή μας ένα αρχείο με όνομα.bash_citric με χρήση του pico ή του nano (πχ pico.bash_citric στο terminal). Στο αρχείο γράφουμε τις εξής γραμμές 32

2 Το Εκπαιδευτικό Πακέτο CITRIC export CITRICROOT=$HOME/CITRIC_0.8 export PATH=$PATH:$CITRICROOT/tools/arm-linux/bin Ακολούθως με χρήση του nano ή του pico προσθέτουμε τις πιο κάτω γραμμές στο αρχείο.bashrc if [ -f ~/.bash_citric ]; then. ~/.bash_citric fi Φορτώνουμε το πρόγραμμα στο TelosB ως εξής : Βάζουμε το TelosB σε μια θυρα usb του υπολογιστή μας και σε ένα terminal γράφουμε την εντολή motelist, θα πρέπει να δούμε στην οθόνη μας το serial number της συσκευής. Μετακινούμαστε στο αρχείο ~/CITRIC_0.85/tos/apps/citric/citric_mote και δίνουμε την εντολή make TelosB. Αν όλα γίνουν σωστά ακολούθως εγκαθιστούμε το πρόγραμμα στο TelosB με την εντολή make TelosB install,n όπου n είναι ένας αριθμός από το 1 εως το 254 και παριστά τον αριθμό του κόμβου που επιθυμούμε! Βήμα 3ο : Το πρόγραμμα του cameraboard Στον φάκελο /CITRIC_0.85/tools θα βρούμε το συμπιεσμένο αρχείο arm-linux.tgz. Αποσυμπιέζουμε το αρχείο αυτό ειται με δεξί κλικ extract here ή με την εντολή tar -zxvf arm-linux.tgz στο terminal. Στο πακέτο υπάρχουν 2 demo εφαρμογές και βρίσκονται στο directory ~/CITRIC_0.85/citric/apps/. Επιλέγουμε την εφαρμογή demo_bgsub και την κάνουμε compile. Αυτό μπορεί να γίνει απευθείας από το terminal γράφοντας την εντολή cd ~/CITRIC_0.85/citric/apps/demo_bgsub για να μετακινηθούμε στο directory της εφαρμογής και ακολούθως την εντολή 33

2 Το Εκπαιδευτικό Πακέτο CITRIC make η οποία θα κάνει compile την εφαρμογή σύμφωνα με το makefile αρχείο στο directory. Βήμα 4ο : Φόρτωση προγράμματος στο cameraboard Μπορούμε να φορτώσουμε το δοκιμαστικό πρόγραμμα στο cameraboard με χρήση του minicom Στο terminal γράφουμε την εντολή minicom για να εκκινήσουμε το minicom, ακολούθως πατάμε ctrl-a και μετα z. Θα παρουσιαστεί η πιο κάτω οθόνη +-------------------------------------------------------------------+ Minicom Command Summary Commands can be called by CTRL-A <key> Main Functions Other Functions Dialing directory..d run script (Go)...G Clear Screen...C Send files...s Receive files...r configure Minicom..O comm Parameters...P Add linefeed...a Suspend minicom...j Capture on/off...l Hangup...H exit and reset...x send break...f initialize Modem...M Quit with no reset.q Terminal settings..t run Kermit...K Cursor key mode...i linewrap on/off...w local Echo on/off..e Help screen...z Paste file...y scroll Back...B Select function or press Enter for none. Written by Miquel van Smoorenburg 1991-1995 Some additions by Jukka Lahtinen 1997-2000 i18n by Arnaldo Carvalho de Melo 1998 +------------------------------------------------------------------+ Στην πιο πάνω οθόνη επιλέγουμε το S για αποστολή αρχείου προς το cameraboard. Ακολούθως εμφανίζεται το μενού επιλογής πρωτοκόλλου. Επιλέγουμε το zmodem και πατάμε enter. +-[Upload]--+ zmodem ymodem xmodem kermit ascii +-----------+ Επιλογή αρχείου για αποστολή σύμφωνα με την πιο κάτω οθόνη. Το πρόγραμμα minicom χρησιμοποιεί διεπαφή κειμένου και έχει την εξής 34

2 Το Εκπαιδευτικό Πακέτο CITRIC ιδιαιτερότητα: πατάμε 2 φορες το spacebar για την είσοδο σε directory και 1 φορά για την επιλογή αρχείου προς αποστολή. Με χρήση της πιο πάνω τακτικής πάμε στο directory ~/CITRIC_0.85/citric/apps/demo_bgsub και επιλέγουμε το εκτελέσιμο demo_bgsub. +----------------[Select one or more files for upload]--------------+ Directory: /home/jaein [CITRIC_0.85] [Desktop] [Documents] [Downloads] [Examples] [Music] [PDF] ( Escape to exit, Space to tag ) +-------------------------------------------------------------------+ Αφού επιλέξουμε το αρχείο demo_bgsub, το minicom το μεταδίδει στο cameraboard Βήμα 5ο : Εκτέλεση προγράμματος στο cameraboard Όταν τελειώσει η μεταφορά του αρχείου επιστρέφουμε πίσω στο terminal του minicom, στην ουσία αυτό είναι το terminal που τρέχει στο λειτουργικό του cameraboard και όχι στον υπολογιστή μας! Πατωντας την εντολή ls κανονικά θα πρέπει να εμφανίζεται το αρχείο demo_bgsub στο τρέχων directory το οποίο είναι το /tmp. Δίνοντας την εντολή ch αποκτούμε δικαιώματα εκτέλεσης εφαρμογής. Ακολούθως εκτελούμε την εφαρμογή δίνοντας την εντολή./demo_bgsub και παρατηρούμε το αντίστοιχο αποτέλεσμα στο terminal. frame frame frame frame frame frame 271 272 273 274 275 276-320 320 320 320 320 321 Αν κινήσουμε παρατηρήσουμε ένα αντικείμενο 35 μπροστά από την camera θα

2 Το Εκπαιδευτικό Πακέτο CITRIC frame 532-320 frame 533-320 blob size = 2204, x blob size = 9687, x writing im0534.jpg frame 534-391 4 164 79, y 315, y 4 8 63 169 Παρατηρούμε δηλαδή ότι το πρόγραμμα εντοπίζει αλλαγή στη εικόνα! Βήμα 6ο : Ετοιμασία του κόμβου-βαση Ο κόμβος-βαση λαμβάνει μηνύματα από τους άλλους κόμβους του δικτύου και είναι συνδεδεμένος με τον υπολογιστή. Το πρόγραμμα για τον κόμβο-βαση βρίσκεται στο directory ~/CITRIC_0.85/tos/apps/citric/citric_base, όταν πάμε σε αυτό το directory μεσώ του terminal πατάμε την εντολή make εφόσον όλα πάνε καλά πατάμε την εντολή make TelosB install,0 όπου το 0 δηλώνει την ταυτότητα του κόμβου βάσης. Βήμα 7ο-8ο : Εκκίνηση της διεπαφής citric_server Η τρέχουσα έκδοση του server έχει ενσωματωμένη στον κώδικα την θύρα /dev/ttyusb0 από την οποία λαμβάνει τα δεδομένα ( όπου είναι συνδεδεμένος ο κόμβος-βαση ). Για να αλλάξουμε την θύρα αυτή, στην περίπτωση που ο κόμβοςβαση βρίσκεται σε διαφορετική διεύθυνση, ανοίγουμε με ένα text editor το αρχείο /CITRIC_0.85/server/HSN/C-Server/_MoteComm.cpp και θα δούμε σε κάποιο σημείο τα εξής: #ifdef linux char MCOMM_PORT[100] = "/dev/ttyusb0"; #else char MCOMM_PORT[100] = "COM9"; #endif Αντικαθιστούμε το /dev/ttyusb0 με την επιθυμητή θύρα (πχ /dev/ttyusb1) που θα βρούμε τρέχοντας την εντολή motelist σε ένα terminal. Εναλλακτικά... μπορούμε από την αρχή να φροντίσουμε ότι ο κόμβος βάση βρίσκεται συνδεδεμένος στην θύρα /dev/ttyusb0! 36

2 Το Εκπαιδευτικό Πακέτο CITRIC Αφου σιγουρευτούμε για τα πιο πάνω πάμε στο αρχείο /CITRIC_0.85/server/HSN μέσω του terminal και δίνουμε την εντολή make για να κάνουμε compile ton server. Όταν δημιουργηθεί το εκτελέσιμο πατάμε δεξί κλικ πάνω του properties και στην καρτέλα permissions επιλέγουμε Allow executing file as program. Από το terminal μετά και εφόσον βρισκόμαστε πάντα στο directory /CITRIC_0.85/server/HSN δίνουμε την εντολή./citric_server για να εκτελέσουμε το πρόγραμμα. MAIN MENU ------------------------[ 1] Mote Selection [ 2] Display Packets [ 3] Log Packets [ 4] Send Packet [ 5] Display Status [ 6] RUN DEMO - BOUNDING BOXES [ 0] EXIT ----------------------------------- Στο σημείο αυτό αξίζει να αναφερθεί η λειτουργία του προγράμματος citric_server σύμφωνα με την πιο πάνω οθόνη [1]Mote Selection : Χρησιμοποιείται για επιλογή των κόμβων που πρόκειται να λάβουν κάποιο μύνημα που θα μεταδοθεί [2]Display Packets : Χρησιμοποιείται για την παρουσίαση των πακέτων που λαμβάνονται από τους κόμβους του δικτύου. [3]Log Packets : Χρησιμοποιείται για την αποθήκευση των πακέτων που λαμβάνονται από τους κόμβους του δικτύου. [4]Send Packet : Παρέχει την δυνατότητα αποστολής κάποιου πακέτου προς τους κόμβους που επιλέγουμε απο την επιλογή 1 του menu. [5]Display Status : Παρουσίαση κατάστασης των ενεργών κόμβων του δικτύου [6]RUN DEMO - BOUNDING BOXES : Η επιλογή αυτή παρεχει την δυνατότητα στον χρήστη να παρατηρήσει τις πληροφορίες που λαμβάνει ο σταθμός-βασής απο τις διάφορες εφαρμογές που τρέχουν στους κόμβους του δικτύου. Η 37

2 Το Εκπαιδευτικό Πακέτο CITRIC λειτουργία της επιλογής αυτής εξαρτάται απο τον κώδικα που βρίσκεται στο αρχείο _UserTask.cpp. Παρέχεται η δυνατότητα σε οποιονδήποτε προσπαθεί να αναπτύξει κάποια εφαρμογή να τροποποιήσει το αρχείο αυτό χωρίς να επηρεάσει τις υπόλοιπες λειτουργίες του προγράμματος citric_server. 38

3 Εφαρμογές Εφαρμογές 3 Στα πλαίσια της διπλωματικής αυτής αναπτύξαμε μια εφαρμογή αναγνώρισης κίνησης η οποία τρέχει στον επεξεργαστή του cameraboard και χρησιμοποιεί τα παρεχόμενα API 12 από το πακέτο citric. Η εφαρμογή αυτή παρακολουθεί το περιβάλλον κοντά στην κάμερα και στην περίπτωση ανίχνευσης κίνησης στέλνει στον κόμβο βάσης φωτογραφίες μέχρι η κίνηση να σταματήσει. Σημειώνεται ότι ακολουθώντας την διαδικασία που περιγράφεται στο προηγούμενο κεφάλαιο μπορούμε να φορτώσουμε την εφαρμογή αυτή στις κάμερες του δικτύου και να την τρέξουμε στο ίδιο δίκτυο. 3.1 Αναγνώριση Κίνησης Υπάρχει πληθώρα αλγορίθμων αναγνώρισης κίνησης οι οποίοι κατηγοριοποιούνται σύμφωνα με τις απαιτήσεις του προβλήματος. Παρακάτω θα αναλύσουμε 2 από τις πιο γνωστές προσεγγίσεις του προβλήματος της αναγνώρισης κίνησης με χρήση ενός αισθητήρα εικόνων. 3.1.1 Frame Differencing Motion Detection Μια από τις πιο γνωστές προσεγγίσεις είναι η σύγκριση του κάθε τρέχοντος frame με το προηγούμενο. Είναι μια χρήσιμη προσέγγιση για την περίπτωση που θέλουμε να αναγνωρίσουμε την ύπαρξη κίνησης αλλά να μην μεταδώσουμε την εικόνα και απλώς να ειδοποιήσουμε τον χρήστη ότι υπήρξε κίνηση. Η βασική ιδέα του αλγορίθμου αυτού είναι η αποθήκευση των pixels του τρέχοντος frame και του προηγούμενου frame σε 2 αντίστοιχους μονοδιάστατους πίνακες. Συγκρίνουμε το κάθε στοιχείο των 2 πινάκων και σχηματίζουμε ένα 3ο πινάκα ο οποίος αποτελεί την διαφορά των 2 προηγούμενων. Αν βλέπαμε αυτό τον πίνακα σαν εικόνα θα παρατηρούσαμε μια εικόνα με μαύρο φόντο και λευκά pixel στα σημεία που εντοπίστηκε διαφορά. 12 Application Programming Interface 39

3 Εφαρμογές Είναι εύκολο τώρα να μετρήσουμε τα pixel που διαφέρουν μεταξύ των 2 frames και αν ο αριθμός τους ξεπερνά κάποιο όριο να ενεργοποιήσουμε κάποιον συναγερμό ή να αποθηκεύσουμε το τρέχων frame. Είναι δυνατή η χρήση φίλτρων τα οποία διαχωρίζουν την πραγματική κίνηση από θόρυβο ο οποίος εντοπίζεται μεταξύ 2 frames. Picture 13: Simple Motion Detection Στην πιο πάνω εικόνα παρατηρούμε το αποτέλεσμα του αλγορίθμου που περιγράφεται στην παράγραφο αυτή. Παρατηρείται το γεγονός ότι αν το κινούμενο αντικείμενο κινείται πολύ αργά δεν εντοπίζεται μεγάλη διαφορά μεταξύ των 2 frames και γιαυτό βλέπουμε μόνο μικρά κομμάτια κόκκινων pixel, υπάρχει ακόμη και η απομακρυσμένη περίπτωση όπου όταν το αντικείμενο κινείται πάρα πολύ αργά δεν εντοπίζεται καθόλου διαφορά αφού ο αριθμός των pixel που αλλάζουν μεταξύ των frames είναι πάντα κάτω από το όριο ενεργοποίησης του συναγερμού. 40

3 Εφαρμογές Ο αλγόριθμος πιο αναλυτικά είναι ο εξής 1. Λήψη του 1ου frame 2. Αποθήκευση του 1ου frame 3. επανέλαβε για πάντα Λήψη νέου frame Αποθήκευση του νέου frame σαν τρέχων frame Σύγκριση του τρέχοντος frame με το προηγούμενο frame Αν η διαφορά είναι πάνω από το όριο σήμανε συναγερμό και επέστρεψε στο 3 Αν δεν εντοπιστεί διαφορά θέσε το 2ο frame σαν 1ο και επέστρεψε στο 3 3.1.2 Background Subtraction Motion Detection Μια άλλη προσέγγιση είναι να συγκρίνουμε το κάθε τρέχων frame με ένα αρχικό frame που αποτελεί ορισμό του φόντου. Αν δεν υπάρχει κανένα αντικείμενο στο αρχικό frame τότε η σύγκριση του με το τρέχων frame θα αποφέρει τον πλήρη εντοπισμό του κινούμενου αντικειμένου ανεξάρτητα της ταχύτητας με την οποία κινείται. Η προσέγγιση όμως αυτή έχει ένα μεγάλο μειονέκτημα που είναι μάλλον και προφανές: Τι θα συμβεί εάν μεταβληθεί το φόντο με κάποιο τρόπο και εμείς ακόμα συγκρίνουμε το τρέχων frame με το αρχικό; Θα εντοπίζουμε συνεχεία κίνηση! Υπάρχει όμως μια σχετικά καλή λύση για τον αλγόριθμο αυτό η οποία λέει ότι ανά τακτά χρονικά διαστήματα μεταβάλλουμε την εικόνα που αποτελεί ορισμό του φόντου σύμφωνα με το τρέχων frame, δηλαδή αντικαθιστούμε κάποια pixel της εικόνας φόντου με τα αντίστοιχα pixels του τρέχοντος frame. Με την τακτική αυτή ενημερώνουμε κλιμακωτά την εικόνα που αποτελεί τον ορισμό του φόντου έτσι ώστε αν έχει αλλάξει κάτι στο πραγματικό φόντο να σταματήσει κάποτε ο αλγόριθμος να θεωρεί ότι εντοπίζει κίνηση. Παρόλα αυτά μηχανισμός σύγκρισης των 2 εικόνων του αλγορίθμου αυτού είναι ο ίδιος με του προηγούμενου. 41

3 Εφαρμογές Picture 14: Motion Detection by Backround Subtraction Στην εικόνα βλέπουμε το αποτέλεσμα του αλγορίθμου εντοπισμού κίνησης μέσω αφαίρεσης του φόντου το αποτέλεσμα είναι σαφώς καλύτερο απο την απλή εφαρμογή. Ο αλγόριθμος πιο αναλυτικά είναι ο εξής 1. Λήψη του 1ου frame 2. Αποθήκευση του 1ου frame σαν ορισμός φόντου 3. επανέλαβε για πάντα Λήψη νέου frame Αποθήκευση του νέου frame σαν τρέχων frame Σύγκριση του τρέχοντος frame με το frame φόντου. Αν η διαφορά είναι πάνω από το όριο σήμανε συναγερμό και επέστρεψε στο 3 Αν δεν εντοπιστεί διαφορά ανανέωσε το frame φόντου και επέστρεψε στο 3 42

3 Εφαρμογές 3.1.3 N-queens-based Algorithm for Motion Detection - Μια ενδιαφέρουσα προσέγγιση Στην δημοσίευση του Srinivasa Rao Angajala Moving Object Detection Algorithm in Distributed Wireless Sensor Networks περιγράφεται ενας αλγοριθμος αναγνωρισης κινησης που εχει ως στοχο την μειωση της κατανάλωσης ενεργειας σε ενα δικτυο εξυπνων καμερων. Ο αλγόριθμος είναι ειδικός για αναγνώριση εισβολέα στον παρακολουθούμενο χώρο και είναι εμπνευσμένος από το γνωστό πρόβλημα N-Queens. Το πρόβλημα των Ν-Queens: Πάνω σε ταμπλό σκακιού διαστάσεων NxN πρέπει να τοποθετηθούν Ν βασίλισσες με τρόπο κατά τον οποίο να μην μπορεί να επιτεθεί καμιά βασίλισσα προς καμιά άλλη με μια κίνηση! Δηλαδή δεν πρέπει να υπάρχουν 2(ή περισσότερες) βασίλισσες σε καμιά από τις οριζόντιες, κάθετες ή οριζόντιες γραμμές του ταμπλό. Ο αλγόριθμος δεν λύνει το πρόβλημα που περιγράφηκε αλλά χρησιμοποιεί μια ή περισσότερες πιθανές λύσεις του προβλήματος. Στην πιο κάτω εικόνα φαίνεται μια πιθανή λύση του προβλήματος. Picture 15: N-Queens problem solution 43