Ροµπότ ως Ξεναγός σε Εκθεσιακό Χώρο ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ

Σχετικά έγγραφα
RobotArmy Περίληψη έργου

«Προγραµµατισµός του LEGO Mindstorm NXT για το διαγωνισµό "Move the Ball!"»

ΠΑΡΑΡΤΗΜΑ IV. ΔΙΔΑΚΤΙΚΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΡΑΡΤΗΜΑ IV Ασκήσεις για το Robolab

ΡΟΜΠΟΤΙΚΗ ΜΕ ΧΡΗΣΗ ΤΟΥ ΠΑΚΕΤΟΥ LEGO MINDSTORMS NXT. ΚΕΦΑΛΑΙΟ 7ο. Δραστηριότητες για το ΝΧΤ-G και το Robolab

Πτυχιακή Εργασία Οδηγώντας ένα Ρομποτικό Αυτοκίνητο με το WiFi. Η Ασύρματη Επικοινωνία, χρησιμοποιώντας

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ ΤΟ ΚΙΤ ΡΟΜΠΟΤΙΚΗΣ LEGO MINDSTORMS EV3

7. Επαναλήψεις (Loops) Προγραμματισμός EV3 Ακαδημία Ρομποτικής 58

Μέρος Α Γνωριμία με το περιβάλλον προγραμματισμού του ρομπότ OTTO

ΔΙΔΑΣΚΑΛΙΑ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΜΕ ΧΡΗΣΗ ΤΟΥ ΠΑΚΕΤΟΥ ΡΟΜΠΟΤΙΚΗΣ LEGO MINDSTORMS NXT

Πολυτεχνείο Κρήτης Τμήμα ΗΜΜΥ Χειμερινό Εξάμηνο Intelligence Lab. Αυτόνομοι Πράκτορες. Κουσανάκης Βασίλης

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ ΤΟ ΚΙΤ ΡΟΜΠΟΤΙΚΗΣ LEGO MINDSTORMS EV3

Γενικές Αρχές. Τεχνολογία ικτύων Επικοινωνιών ΙΙ

Εισαγωγή στη Ρομποτική και τον Προγραμματισμό με τη χρήση του ρομπότ Thymio & του λογισμικού Aseba

Breakdance Computer Game σε Scratch.

Atlantis - Νέο user interface

ΒΑΣΙΚΑ ΜΑΘΗΜΑΤΑ ΝΤΟΥΛΑΚΗΣ - ΜΕΝΙΟΥΔΑΚΗΣ ΕΠΑ.Λ ΕΛ. ΒΕΝΙΖΕΛΟΥ

Σχεδίαση του αλγορίθμου για το παιχνίδι Rat s Life

Εξοικείωση με το NXT-G

αντίστοιχο γεγονός. Όταν όντως το κουμπί

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

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Υπάρχουν δύο τύποι μνήμης, η μνήμη τυχαίας προσπέλασης (Random Access Memory RAM) και η μνήμη ανάγνωσης-μόνο (Read-Only Memory ROM).

Slalom Race Computer Game on Scratch

4 ο Εργαστήριο Τυχαίοι Αριθμοί, Μεταβλητές Συστήματος

Σχήµα 4.1: Εισαγωγή βρόγχου while-loop.

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ ΤΟ ΚΙΤ ΡΟΜΠΟΤΙΚΗΣ LEGO MINDSTORMS EV3

Ρύθμιση ενός Αισθητήρα

Αυτόνομοι Πράκτορες. ΝΑΟ Μουσικός

Τα ηλεκτρονικά μέρη του ρομπότ Επιλογή των μονάδων εισόδου εξόδου ανάλογα το μοντέλο που θέλουμε να κατασκευάσουμε

Κεφάλαιο 9 ο Κ 5, 4 4, 5 0, 0 0,0 5, 4 4, 5. Όπως βλέπουµε το παίγνιο δεν έχει καµιά ισορροπία κατά Nash σε αµιγείς στρατηγικές διότι: (ΙΙ) Α Κ

Πακέτο Lego Mindstorms


ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 2. Σύνταξη μπλοκ εντολών. Δραστηριότητα 1

οµή δικτύου ΣΧΗΜΑ 8.1

Σχήµα 6.1: Εισαγωγή της εντολής Read From Spreadsheet File στο Block Diagram.

ΑΥΤΟΝΟΜΟΙ ΠΡΑΚΤΟΡΕΣ ΠΛΗ 513

Διδασκαλία γραμμάτων-συλλαβών

4.3. Γραµµικοί ταξινοµητές

Προγραµµατισµός Ι (ΗΥ120)

ΗΜΙΟΥΡΓΙΑ ΠΑΙΧΝΙ ΙΟΥ ΣΤΟ SCRATCH ΒΗΜΑ ΠΡΟΣ ΒΗΜΑ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ EV3 Επίπεδο Ι

Ταυτότητα εκπαιδευτικού σεναρίου. Γνώσεις και πρότερες ιδέες των μαθητών. Σκοπός και στόχοι

Επαναληπτικό ιαγώνισµα Πληροφορικής Γ Γυµνασίου Γιώργος Λιακέας Σχολικός Σύµβουλος Πληροφορικής Ερωτήσεις

Μικροεπεξεργαστές. Σημειώσεις Μαθήματος Υπεύθυνος: Δρ Άρης Παπακώστας,

ΠΕΡΙΕΧΟΜΕΝΑ. Περιγραφή της αρχικής οθόνης κάθε τάξης α. Εικονίδια επιλογής θεµατικών ενοτήτων β. Εικονίδια διαφυγής...

BeoSound 9000 Οδηγ ς

Πανεπιστήµιο Θεσσαλίας

Outlook Express-User Instructions.doc 1

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

Κεφάλαιο 10 Περιστροφική Κίνηση. Copyright 2009 Pearson Education, Inc.

ΕΝ ΕΙΚΤΙΚΑ ΠΑΡΑ ΕΙΓΜΑΤΑ ΚΡΙΤΗΡΙΩΝ ΑΞΙΟΛΟΓΗΣΗΣ. Κεφάλαιο 17


ΣΥΣΤΗΜΑΤΑ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑ ΕΛΕΓΧΟΥ. Εγχειρίδιο χρήσης

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

Παιδαγωγική προσέγγιση: Πρόταση για την διδασκαλία της έννοιας αλγόριθµός στο περιβάλλον MicroWorlds Pro

7.5 Πρωτόκολλο IP. Τεχνολογία ικτύων Επικοινωνιών ΙΙ

Cubitech Hellas Ακροπόλεως 24, Καλλιθέα, Αθήνα Τ.Κ , Ελλάδα, Τηλ Φαξ

Kεφάλαιο 10. Πόσα υποπαίγνια υπάρχουν εδώ πέρα; 2 υποπαίγνια.

Επίλυση Προβληµάτων µε Greedy Αλγόριθµους

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών

ΦΥΛΛΟ ΠΛΗΡΟΦΟΡΙΩΝ. Μονάδες μέτρησης χωρητικότητας μνήμης - Η περιφερειακή μνήμη

Καροτοκυνηγός. Αντικείμενα

Ασύρματη ψηφιακή συσκευή παρακολούθησης και αμφίδρομης επικοινωνίας για μωρό VB601

Επαναληπτικές δοµές. µτ α.τ. Όχι. ! απαγορεύεται µέσα σε µία ΓΙΑ να µεταβάλλουµε τον µετρητή! διότι δεν θα ξέρουµε µετά πόσες επαναλήψεις θα γίνουν

Ενότητα 4. Εισαγωγή στην Πληροφορική. Αναπαράσταση δεδοµένων. Αναπαράσταση πληροφορίας. υαδικοί αριθµοί. Χειµερινό Εξάµηνο

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

> μεγαλύτερο <= μικρότερο ή ίσο < μικρότερο == ισότητα >= μεγαλύτερο ή ίσο!= διαφορετικό

Ο ΗΓΙΕΣ ΛΕΙΤΟΥΡΓΙΑΣ. Τοποθέτηση και αντικατάσταση των µπαταριών. Γενικές πληροφορίες. Περιγραφή λειτουργίας. ruwido s_4 τηλεχειριστήριο γενικής χρήσης

Φύλλο Εργασίας 4 Συνθετική εργασία

παράθυρα ιδακτικό υλικό µαθητή Πλήκτρα για να το παράθυρο Λωρίδα τίτλου Πλαίσιο παραθύρου

Σχεδιαστικές προδιαγραφές

Α. Ερωτήσεις Ανάπτυξης

Ο έλεγχος στο επίπεδο συστήµατος επικοινωνιών εξασφαλίζει ότι έχουµε µεταφορά στο δίκτυο χωρίς λάθη.

Tank Rescue Computer Game σε Scratch

Συλλογή & Επεξεργασία Δεδομένων Εξαμηνιαία ΡομποΚαθαριστής Μέρος Β : Το Πρόγραμμα. Σχεδίαση Συστήματος Πραγματικής Εφαρμογής (Prototyping).

H ΓΛΩΣΣΑ C. Μάθηµα 1: Το Πρώτο µας Πρόγραµµα σε C. ηµήτρης Ψούνης

(3) Από την εργαλειοθήκη επιλέξτε το εργαλείο «ετικέτας (Label)». Δημιουργήστε μια ετικέτα στην φόρμα σας.

Οδηγίες Χρήσεως. Username: Password:

Αναγνώριση υποθεµάτων αρχείων Αντιγραφή κειµένου Αντιγραφη εικόνων Αντιγραφή video

THERMOMETER TC-101 ΕΓΧΕΙΡΙ ΙΟ ΕΓΚΑΤΑΣΤΑΣΗΣ ΚΑΙ ΧΡΗΣΗΣ. 7/12/2011 AUTOGUARD-PG Σελ.1 7/12/2011 AUTOGUARD-PG Σελ.2

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

η σύνθεση ενός υπολογιστή

char name[5]; /* define a string of characters */

1. Εγκατάσταση του NetMeeting

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

Γραµµικός Προγραµµατισµός - Μέθοδος Simplex

ΠΕΡΙΕΧΟΜΕΝΑ... 2 ΠΡΟΛΟΓΟΣ... 3 ΕΙΣΑΓΩΓΗ... 4 ΤΑ ΚΟΥΜΠΙΑ ΚΑΙ ΤΑ ΜΠΛΟΚ... 6 ΧΡΗΣΙΜΟΠΟΙΩΝΤΑΣ ΤΟΥΣ ΚΙΝΗΤΗΡΕΣ... 9 ΚΙΝΗΣΕΙΣ ΚΙΝΗΤΗΡΑ...

VMV SYSTEMS. ΕΛΛΗΝΙΚΑ ΤΑΒ 4. 2 Τ Α Β Μαρτίου 64. Τ.Κ Λάρισα. Τηλ:(041) Fax: (041) Κιν:

ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ

Σύστηµα Καθοδήγησης σε Parking DUPLINE

Τ.Ε.Ι. ΚΡΗΤΗΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΙΑΣ. Ασκήσεις 1-2 Εισαγωγή

Ανιχνευτής Διαρροής Αερίων Καυσίμων (V-GDN02 Φυσικού Αερίου), (V-GDL02 LPG).

ΘΕΜΑ: «Tα υβριδικά αυτοκίνητα»

Ελεγχος, Αξιοπιστία και Διασφάλιση Ποιότητας Λογισµικού Πολυπλοκότητα

7.3 Πρωτόκολλο TCP. 1. Το TCP πρωτόκολλο παρέχει υπηρεσίες προσανατολισµένες σε σύνδεση. Σ Λ

Γενικό Λύκειο Κρουσώνα - Σχολικό έτος Εκπαιδευτικός: Παπαδάκης Σταµάτης

Β1.1 Δημιουργία Εφαρμογής στο Περιβάλλον Προγραμματισμού EdScratch του Edison ρομπότ

ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Ψηφιακά Αντικείμενα Μάθημα 1 Δραστηριότητα 2. Προγραμματισμός Φυσικών Συστημάτων. Συστήματα Πραγματικών Εφαρμογών. Νέα Ψηφιακά Αντικείμενα

Transcript:

Ατοµική Διπλωµατική Εργασία Ροµπότ ως Ξεναγός σε Εκθεσιακό Χώρο Νικόλας Νικολάου ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ Ιούνιος 2003

Ευχαριστίες Θα ήθελα να εκφράσω τις θερµές µου ευχαριστίες σε όλους όσους έχουν συµβάλει άµεσα ή έµµεσα στην ολοκλήρωση της εργασίας αυτής. Ευχαριστώ θερµά, τον επιβλέποντα καθηγητή µου Δρ. Συµεών Ρετάλη για την πρόθυµη βοήθεια και καθοδήγηση που µου πρόσφερε καθ όλο το διάστηµα εκπόνησης της διπλωµατικής µου εργασίας. Ευχαριστώ, επίσης, την οµάδα υποστήριξης χρηστών του ActivMedia για την πρόθυµη και αποτελεσµατική συνεργασία που είχαν µαζί µου και για την βοήθεια τους σε προβλήµατα που αντιµετώπισα µε το ροµπότ. Ευχαριστώ, τους φοιτητές που δούλεψαν πριν από εµένα µε το ροµπότ οι οποίοι µε την εργασία τους µε βοήθησαν να καταλάβω τις βασικές αρχές και τρόπους προγραµµατισµού του. Τέλος, οφείλω να ευχαριστήσω την οικογένειά µου, τη φίλη µου Άντρη αλλά και όλους τους στενούς µου φίλους για την ηθική υποστήριξη και συµπαράσταση τους.

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ Ροµπότ ως Ξεναγός σε Εκθεσιακό Χώρο Νικόλας Νικολάου Επιβλέπων Καθηγητής Δρ. Συµεών Ρετάλης Η Ατοµική αυτή Διπλωµατική Εργασία υποβλήθηκε προς µερική εκπλήρωση των απαιτήσεων απόκτησης του πτυχίου Πληροφορικής του Τµήµατος Πληροφορικής του Πανεπιστηµίου Κύπρου Ιούνιος 2003

Περιεχόµενα Κεφάλαιο 1: Εισαγωγή... 1 1.1 Ροµποτική στην Πληροφορική 1.2 Μερικά Ροµπότ 1.3 Σκοπός της Ατοµικής Διπλωµατικής Εργασίας 1.4 Δοµή της Ατοµικής Διπλωµατικής Εργασίας 1 2 4 6 Κεφάλαιο 2: Περιγραφή και Τεχνικά Χαρακτηριστικά του Amigobot... 2.1 Τι είναι το Amigobot; 2.2 Υλικό (Hardware) Amigobot 2.3 Λογισµικό (Software) Amigobot 7 7 8 12 Κεφάλαιο 3: Αλγόριθµος... 3.1 Γενική Ιδέα Αλγορίθµου 3.2 Σχεδιαγράµµατα Καταστάσεων 3.3 Φόρτωµα κατάλληλων Βιβλιοθηκών και Καθολικές Μεταβλητές 3.4 Χάρτης Δωµατίου 3.5 Συµπεριφορές (Actions) και Συναρτήσεις (Activities) 3.6 Εντοπισµός προσώπου (Κλάση SfTrackPersonAction) 3.7 Χάσιµο προσώπου και τρόπος εύρεσής του (Κλάση SfKeepTurningAction) 3.8 Παρουσίαση εκθεµάτων (Κλάση SfExhibitIntroduceAction) 3.9 Κίνηση προς τα εµπρός (Κλάση SfForwardAction) 3.10 Αποφυγή εµποδίων (Κλάση SfAvoidObstacles) 3.11 Αρχική κατάσταση (Activity Initial() ) 3.12 Περιήγηση στον εκθεσιακό χώρο (Activity StartGuide() 3.13 Αντιδράσεις του ροµπότ 3.14 Επιστροφή στην αρχική κατάσταση ( Activity GoHome() ) 19 19 20 31 35 36 38 55 60 69 72 75 77 78 85

3.15 Ενέργειες για αποφυγή µπλοκαρίσµατος ( Activity Unstack() ) 3.16 Καθολικές Συναρτήσεις της δυναµικής βιβλιοθήκης 3.17 Προσανατολισµός του ροµπότ στο χώρο 86 89 90 Κεφάλαιο 4: Αξιολόγηση Εργασίας... 4.1 Γενική αξιολόγηση 4.2 Δοκιµές των Ενεργειών 4.3 Προβλήµατα που εντοπίστηκαν 4.4 Συµπεράσµατα 92 92 92 97 100 Παράρτηµα Α: Χαρακτηριστικά Ροµπότ... Α- 1

Κεφάλαιο 1 Εισαγωγή 1.1 Ροµποτική στην Πληροφορική 1 1.2 Μερικά Ροµπότ 2 1.3 Σκοπός της Ατοµικής Διπλωµατικής Εργασίας 4 1.4 Δοµή της Ατοµικής Διπλωµατικής Εργασίας 6 1.1 Ροµποτική στην Πληροφορική Στα τελευταία χρόνια η επιστήµη της Πληροφορικής έχει κάνει δραµατικά επιτεύγµατα. Ανάµεσα σε αυτά είναι και η εκµετάλλευση της Πληροφορικής στο τοµέα της ροµποτικής. Ο άνθρωπος δηµιουργεί τα ροµπότ σε µια προσπάθεια να διευκολύνει τον εαυτό του σε κάποιους τοµείς αλλά και για να µπορεί να κάνει πράγµατα που είναι αδύνατα για τον ίδιο. Έτσι δηµιουργήθηκαν διαφόρων ειδών ροµπότ για να χρησιµοποιούνται για διαφορετικούς σκοπούς το καθένα. Σήµερα µπορούµε να βρούµε ροµπότ για χρήση στην βιοµηχανία, για εκπαιδευτικούς σκοπούς, για ψυχαγωγία ακόµα και για προσωπική βοήθεια ατόµων µε ειδικές ανάγκες. Με τον σωστό προγραµµατισµό τα ροµπότ µπορούν να καταφέρουν πολλά. Μερικές εταιρείες ανάπτυξαν τις δικές τους γλώσσες προγραµµατισµού για να δουλεύουν τα δικά τους ροµπότ. Άλλες εταιρείες εκµεταλλεύονται τις ήδη υπάρχουσες δυνατές γλώσσες προγραµµατισµού όπως είναι η C. Τέλος υπάρχουν οι εταιρείες που κάνουν συνδυασµό των δύο πιο πάνω µεθόδων. Τα ροµπότ πήραν ραγδαία ανάπτυξη στο χώρο της βιοµηχανίας. Οι βαρετές και χρονοβόρες εργασίες µε την χρήση των ροµπότ µετατράπηκαν σε εργασίες της στιγµής. Η παραγωγικότητα αυξήθηκε και µειώθηκε ο κίνδυνος για εργατικά ατυχήµατα. Οι - 1 -

εταιρίες έβλεπαν την επανάσταση που έφεραν τα ροµπότ στη βιοµηχανία και έτσι η εξάπλωσή τους ήταν θέµα µερικών χρόνων. Η κάθε εταιρεία επεδίωκε µεγάλη ακρίβεια και µεγάλη παραγωγικότητα, ένας συνδυασµός που µόνο η χρήση των ροµπότ µπορούσε να προσφέρει. Τα ροµπότ αργότερα χρησιµοποιήθηκαν για πιο ανθρωπιστικούς σκοπούς. Άρχισαν πλέον να µπαίνουν στα σπίτια ανθρώπων ως µέσω ψυχαγωγίας ή ακόµα ως µέσω βοήθειας προς τους ανθρώπους. Γύρω στο 2001 κατασκευάσθηκε και το πρώτο ροµπότ µε «αισθήµατα». Το όνοµά του είναι Kismet και πήρε µια θέση στο βιβλίο Guinness για την πρωτοτυπία του. Το ροµπότ αυτό αντιδρά σε εξωτερικά ερεθίσµατα εκφράζοντας στο πρόσωπό του χαρά, λύπη, δυσαρέσκεια αλλά και άλλα συναισθήµατα. Το αποκορύφωµα χρήσης των ροµπότ για ανθρωπιστική βοήθεια έγινε τον αιµατηρό Σεπτέµβριο όταν κτυπήθηκαν οι δίδυµοι πύργοι της Αµερικής. Εκεί κατασκεύασαν ειδικά ροµπότ για να εισχωρήσουν στα συντρίµµια και τα οποία µετέδιδαν ένα οπτικό σήµα που θα βοηθούσε στην ανεύρεση επιζώντων. Τώρα συναντούµε τα ροµπότ ως εκπαιδευτικά αντικείµενα. Αυτό παίζει µεγάλο ρόλο στην ανάπτυξη της χρήσης των ροµπότ. Δίδεται η δυνατότητα µέσα από ανώτατα εκπαιδευτικά ιδρύµατα να δηµιουργηθούν νέες µελέτες και νέες δηµιουργίες γύρω από το θέµα της ροµποτικής. Τα ροµπότ έχουν επαφή µε το περιβάλλον γύρω τους µε διάφορους τρόπους. Κάποια µπορεί να χρησιµοποιούν κάµερα, άλλα χρησιµοποιούν συσκευές laser, άλλα υπερηχητικά κύµατα κτλ. Ο κάθε τρόπος προσφέρει στο ροµπότ που το χρησιµοποιεί κάποια ιδιαίτερη δυνατότητα. Ο συνδυασµός τους µεν συνεπάγεται σε πολύ περισσότερες δυνατότητες. Στην δική µας περίπτωση το ροµπότ που χρησιµοποιούµε διαθέτει 8 ηχοβολιστικά τα οποία του προσφέρουν την αίσθηση των γύρω αντικειµένων. 1.2 Μερικά Ροµπότ - 2 -

Όπως αναφέραµε υπάρχουν πολλά είδη ροµπότ. Θα παρουσιάσω τώρα µερικά ροµπότ τα οποία κατασκευάζονται από την εταιρεία που µας προµήθευσε το δικό µας ροµπότ. Amigobot Σχήµα 1.1 Στο Σχήµα 1.1 βλέπουµε το ροµπότ που πρόκειται να χρησιµοποιήσουµε στην εργασία µας. Εδώ παρουσιάζεται να έχει µια µικρή κάµερα που µας βοηθάει να έχουµε οπτική επαφή µε το τι βρίσκει µπροστά του και µια δαγκάνα που του επιτρέπει να µεταφέρει αντικείµενα. Αυτό ανήκει στην κατηγορία των εκπαιδευτικών ροµπότ. PatrolBot Σχήµα 1.2-3 -

Στο Σχήµα 1.2 βλέπουµε το patrolbot. Είναι πιο γεροδεµένο από το amigobot και φαίνεται ότι είναι σχεδιασµένο για βαρύτερες δουλειές. Είναι και αυτό διαφορικής κίνησης. Είναι εφοδιασµένο µε κάµερα, ηχοβολιστικά, ηχεία και laser. PeopleBot Το ροµπότ αυτό χρησιµεύει για επικοινωνία µαζί µε ανθρώπους. Διαθέτει µια µικρή οθόνη αγγίγµατος που επιτρέπει στους χρήστες να εισάξουν δεδοµένα. Έχει ηχοβολιστικά, κάµερα και laser αισθητήρες. Μπορεί να ελέγχει όχι µόνο κατά πλάτος αλλά και κατά ύψος. Φαίνεται αρκετά εργονοµικό και θα ήταν ένας πολύ καλός ξεναγός σε µουσείο. Σχήµα 1.3 1.3 Σκοπός της Ατοµικής Διπλωµατικής Εργασίας Σκοπός αυτής της Διπλωµατικής Εργασίας είναι η εκµάθηση των δυνατοτήτων ενός ροµπότ και ο προγραµµατισµός του µε τέτοιο τρόπο ώστε να είναι σε θέση να κινείται έξυπνα µέσα σε ένα εκθεσιακό χώρο. Θα χρησιµοποιήσουµε το ροµπότ µε τέτοιο τρόπο ώστε να αποτελεί τον ξεναγό του εκθεσιακού µας χώρου. Όπως και ο ξεναγός θα πρέπει να έχει την δυνατότητα να επικοινωνεί µε τους επισκέπτες του χώρου, να αλληλεπιδρά µαζί τους και να τους ενηµερώνει σχετικά µε τα εκθέµατα που βρίσκονται στο χώρο αυτό. Στην δική µας περίπτωση ο ξεναγός µας θα είναι πολύ ξεχωριστός αφού δεν θα έχει µια τυπική σχέση µε τους επισκέπτες αλλά απρόσµενα θα τους ξαφνιάζει ή ακόµα και θα τους φοβίζει. - 4 -

Το ροµπότ που θα χρησιµοποιήσουµε είναι ένα εκπαιδευτικό ροµπότ που φέρει το όνοµα Amigobot. Τεχνικά το ροµπότ αυτό έχει την δυνατότητα να επικοινωνεί µε το περιβάλλον γύρω του µέσω των 8 αισθητήρων που διαθέτει. Χρησιµοποιεί διαφορική κίνηση και µπορεί να ελεγχθεί ασύρµατα µε την βοήθεια ειδικών συσκευών. Για τον προγραµµατισµό του θα πρέπει να χρησιµοποιηθεί γλώσσα προγραµµατισµού C και ειδική για αυτή την οικογένεια των ροµπότ γλώσσα, η Colbert. Ξεκινώντας µε τα πιο πάνω δεδοµένα θα πρέπει να σκεφτούµε τρόπους εκµετάλλευσης τους ώστε να φτάσουµε στο επιθυµητό αποτέλεσµα. Θα δούµε πως µπορούµε να χρησιµοποιήσουµε απλές ενδείξεις απόστασης για να ξεχωρίζουµε τα αντικείµενα που εντοπίζουµε. Πως µπορούµε να αποφεύγουµε αντικείµενα και πως µπορούµε να επαναφέρουµε το ροµπότ σε περιπτώσεις µπλοκαρίσµατος. Όλα αυτά τα προβλήµατα πρέπει να λυθούν µε σωστούς αλγορίθµους ώστε να πάρουµε τα σωστά αποτελέσµατα. Μετά το τέλος της εργασίας το ροµπότ θα πρέπει να έχει τις εξής δυνατότητες: 1. Να παρουσιάζει τα εκθέµατα του χώρου στους επισκέπτες. 2. Να ακολουθεί κάποιο επισκέπτη στο χώρο. 3. Να φέρεται φιλικά στους επισκέπτες του χώρου. 4. Να περιπλανιέται άσκοπα στο χώρο αποφεύγοντας έξυπνα αντικείµενα και επισκέπτες. 5. Να φέρεται εχθρικά σε κάποιο επισκέπτη. 6. Να κάνει γύρους µέσα στον χώρο. 7. Να µπορεί να γυρίσει πίσω στην αρχική του θέση όταν παρουσιάσει όλα τα εκθέµατα ή όταν η µπαταρία του δεν του επιτρέπει να συνεχίσει. Εκτός από τους πιο πάνω, ένας σηµαντικός στόχος που πρέπει να επιτευχθεί είναι να κρατάµε το ροµπότ προσανατολισµένο µέσα στο χώρο. Για να το καταφέρουµε αυτό πρέπει να χρησιµοποιήσουµε σωστά κάποιες βιβλιοθήκες. Εκτός όµως από το προγραµµατιστικό κοµµάτι υπάρχει και το σχεδιαστικό όπου πρέπει να σχεδιάσουµε τον χάρτη του δωµατίου µέσα στο οποίο πρόκειται να χρησιµοποιήσουµε το ροµπότ. - 5 -

Τέλος µετά την υλοποίηση θα ακολουθήσει αξιολόγηση της δουλειάς που θα γίνει. Θα δούµε και θα αναλύσουµε κατά πόσο το ροµπότ εκτελεί τα προσχεδιασµένα σενάρια, αν ανταποκρίνεται σωστά στους αρχικούς στόχους ή αν απέχει πολύ από αυτούς. Θα δούµε την ορθότητα των αλγορίθµων που χρησιµοποιήθηκαν και θα δούµε αν είναι βέλτιστοι ή µε ποιο τρόπο µπορούν να βελτιστοποιηθούν. Θα αξιολογήσουµε τις µετρήσεις που επιστρέφει το ροµπότ αλλά και πως αυτές επηρεάζονται µε την κίνηση του. Θα πρέπει να δούµε και να συζητήσουµε κατά πόσο µπορεί να υπάρξει ένας τέτοιος ξεναγός σε πραγµατικό περιβάλλον εκθεσιακού χώρου. 1.4 Δοµή της Ατοµικής Διπλωµατικής Εργασίας Η Διπλωµατική Εργασία παρουσιάζει τέτοια δοµή ώστε ο αναγνώστης να µπορεί να αντιλαµβάνεται κάθε στιγµή αυτά που διαβάζει. Προσπαθούµε όσο γίνεται να χρησιµοποιούµε όρους στο κείµενο οι οποίοι έχουν, µέχρι εκείνο το σηµείο, επεξηγηθεί. Αρχικά θέλουµε να δείξουµε στον αναγνώστη µε τι έχουµε να κάνουµε. Έτσι αµέσως µετά την εισαγωγή περιγράφουµε τα τεχνικά χαρακτηριστικά και τις φυσικές δυνατότητες του ροµπότ. Ακολούθως παρουσιάζουµε την γενική ιδέα του αλγορίθµου και µετά δείχνουµε τα διαγράµµατα καταστάσεων της κάθε φάσης του. Αφού ο αναγνώστης πάρει µια γενική ιδέα του αλγορίθµου, µε την βοήθεια κοµµατιών από τον κώδικα, τον εξηγούµε µε µεγαλύτερη λεπτοµέρεια. Τέλος αξιολογούµε την δουλεία που έχουµε κάνει µε πειράµατα και δοκιµές. - 6 -

Κεφάλαιο 2 Περιγραφή και Τεχνικά Χαρακτηριστικά του Amigobot 2.1 Τι είναι το Amigobot; 7 2.2 Υλικό (Hardware) Amigobot 8 2.3 Λογισµικό (Software) Amigobot 12 2.1 Τι είναι το Amigobot; Το Amigobot είναι ένα έξυπνο κινητό ροµπότ το οποίο είναι δηµιούργηµα ειδικών στην τεχνητή και µηχανική νοηµοσύνη. Ένας από τους κύριους σχεδιαστές και δηµιουργούς του ροµπότ αυτού είναι ο Dr. Kurt Konolige, ο οποίος πριν το συγκεκριµένο έχει σχεδιάσει κι άλλα ροµπότ της ίδιας κλάσης. Το Amigobot είναι ένα µικρό, τρίτροχο, διαφορικής οδήγησης και έξυπνο ροµπότ. Είναι ένα ροµπότ τύπου plug and play, το οποίο περιλαµβάνει όλα τα βασικά στοιχεία για αυτόνοµη αίσθηση και κίνηση σ ένα πραγµατικό περιβάλλον. Μπορούµε να χωρίσουµε τα τεχνικά χαρακτηριστικά του σε δύο µεγάλες κατηγορίες: Υλικό ( Hardware ) o Φυσικά Χαρακτηριστικά o Κοµβία, Μοτέρ, Ηχεία, Λαµπτήρες o Αισθητήρες o Ασύρµατες συσκευές επικοινωνίας o Μικροεπεξεργαστής. Λογισµικό ( Software ) o Λειτουργικό σύστηµα του ροµπότ o Ασύρµατη επικοινωνία o Γλώσσες Προγραµµατισµού του Ροµπότ - 7 -

2.2 Υλικό ( Hardware ) Amigobot Το υλικό περιλαµβάνει όλα τα υλικά και φυσικά χαρακτηριστικά του ροµπότ. Περιγράφει την τεχνολογία που χρησιµοποιήθηκε και την λογική επεξήγηση για την χρήση αυτής. Περιγράφει την εργονοµία και λειτουργικότητα των υλικών µερών του ροµπότ. Φυσικά Χαρακτηριστικά Σχήµα 2.1 Μεγέθη του Amigobot Το ροµπότ αυτό σχεδιάστηκε για εσωτερικούς χώρους όπως σπίτια, αίθουσες διδασκαλίας, µουσεία, νοσοκοµεία κτλ. Είναι µικρό µε διαστάσεις 28 x 33 x 13 cm, ελαφρύ µε βάρος µόλις 3,6 κιλά (µε µπαταρία) και πολύ ευκίνητο αφού µπορεί να αναπτύξει ταχύτητες µέχρι 750mm/s και να περιστραφεί µε ταχύτητες περιστροφής µέχρι 300 ο /s. Το περίβληµά του αποτελείται από ένα σκληρό ανθρακικό κατασκεύασµα και ένα οµογενές αλλά πολύ ελαφρύ αλουµινένιο σκελετό τα οποία καθιστούν το ροµπότ πολύ ανθεκτικό. Έχει δύο λαστιχένιους τροχούς, διαµετρήµατος 10cm ο καθένας, οι οποίοι ελέγχονται από τα µοτέρ και ένα µικρότερο παθητικό τροχό από πίσω απλά για στήριξη. Τέλος τα πιο πάνω χαρακτηριστικά επιτρέπουν στο Amigobot να κουβαλά επιπρόσθετο βάρος 1 κιλού. Κοµβία, Μοτέρ, Ηχεία, Λαµπτήρες Α) Επαναφόρτηση / Ενεργοποίηση/ Μπαταρία - 8 -

Όταν κοιτάξει κάποιος κάτω, πίσω και αριστερά θα παρατηρήσει ένα κυλιόµενο κουµπί. Αυτό χρησιµοποιείται για ενεργοποίηση του ροµπότ. Μόλις το ροµπότ ενεργοποιηθεί το κόκκινο λαµπάκι θα ανάψει. Σχήµα 2.2 Switch, Υποδοχή Charger και Υποδοχή Serial Port Δίπλα από το κουµπί αυτό βρίσκεται η υποδοχή του φορτιστή της µπαταρίας. Η µπαταρία είναι 12VDC και προµηθεύει τα απαραίτητα µέρη του ροµπότ για να επιτυγχάνεται η κίνηση και γενικά η λειτουργικότητα του ροµπότ. Αντέχει, όταν το ροµπότ είναι σε συνεχή λειτουργία, µέχρι 3 ώρες. Η µπαταρία πρέπει να φορτίζεται µόλις η ένδειξή της πέσει κάτω από 11VCD παρόλο που το ροµπότ θα συνεχίζει να λειτουργεί κανονικά. Αυτό συµβαίνει για να µην πάθει ζηµιά το λειτουργικό σύστηµα του ροµπότ. Το ίδιο το ροµπότ προειδοποιά µέσω του ηχείου για την πτώση της µπαταρίας σε κρίσιµα επίπεδα. Αν η µπαταρία πέσει κάτω από 10VCD τότε απενεργοποιούνται τα µοτέρ και θα διακόψει κάθε ενεργή επικοινωνία. Β) Κουµπιά και Λαµπάκια στο πάνω µέρος του ροµπότ Σχήµα 2.3 Λαµπάκια και κοµβία στο πάνω µέρος του ροµπότ Στο πάνω µέρος και πλάγια πίσω του ροµπότ βρίσκονται δυο κουµπιά, χρώµατος κόκκινο και µαύρο, και τρία λαµπάκια, χρώµατος κόκκινο, πορτοκαλί και πράσινο. Το κόκκινο λαµπάκι όπως είπαµε και πιο πάνω δείχνει αν είναι ενεργοποιηµένο το ροµπότ. - 9 -

Το κόκκινο κουµπί αντιπροσωπεύει τη λειτουργία Reset. Πάτηµα αυτού του κουµπιού σε οποιαδήποτε στιγµή θα συνεπάγεται να ξεκινήσει το ροµπότ από την αρχική του κατάσταση, δηλ. απενεργοποιηµένα µοτέρ και διακεκοµµένη η επικοινωνία. Η λειτουργία του µαύρου κουµπιού εξαρτάται από την κατάσταση που θα βρίσκεται το ροµπότ. Αν το ροµπότ δεν είναι ενωµένο µε κάποιο χρήστη τότε πατώντας αυτό το κουµπί µπαίνουµε σε κατάσταση δοκιµής των µοτέρ. Ξαναπατώντας το ξεκινά η δοκιµή. Αν τώρα το ροµπότ είναι ενωµένο µε κάποιο χρήστη τότε πατώντας αυτό το κουµπί µπορούµε να ενεργοποιήσουµε ή να απενεργοποιήσουµε τα µοτέρ. Το πράσινο και το πορτοκαλί λαµπάκι είναι υπεύθυνα για να µας δείχνουν την κατάσταση του λειτουργικού συστήµατος του ροµπότ. Για παράδειγµα µόλις ξεκινήσουµε το ροµπότ η πράσινη λάµπα αναβοσβήνει αργά και ρυθµικά ενώ η πορτοκαλιά λάµπα είναι σβηστή. Όταν το ροµπότ ενωθεί µε κάποιο χρήστη το πορτοκαλί λαµπάκι αναβοσβήνει γρήγορα δείχνοντας µας την ένωση. Σε αυτή την περίπτωση το πράσινο λαµπάκι αναβοσβήνει γρήγορα αν τα µοτέρ είναι απενεργοποιηµένα, και αργά όταν τα µοτέρ είναι ενεργοποιηµένα. Γ) Ήχοι Σχήµα 2.4 Ηχείο Το ροµπότ διαθέτει ένα Onboard Audio System το οποίο έχει την δυνατότητα να αναπαράγει αρχεία µουσικής τα οποία βρίσκονται φυλαγµένα µέσα στο onboard Flash ROM χωρητικότητας 1MB. Υπάρχει δυνατότητα για εισδοχή 255 ήχων από τους οποίους οι 49 χρησιµοποιούνται για ενέργειες του συστήµατος. Η πηγή από όπου ακούγεται ο ήχος βρίσκεται πίσω και πλάγια του ροµπότ. Δ) Μοτέρ Το οδικό σύστηµα που χρησιµοποιεί το ροµπότ µπορεί να αναπτύξει µεγάλες ταχύτητες τόσο για ευθείες όσο και για περιστροφικές κινήσεις λόγο των δυο µοτέρ που διαθέτει. Κάθε µπροστινό µοτέρ περιλαµβάνει ένα υψηλής ανάλυσης οπτικό αξονικό κωδικοποιητή ο οποίος εξασφαλίζει 9,550 σήµατα σε κάθε περιστροφή του - 10 -

τροχού(περίπου 30 σήµατα το δευτ.) για προσδιορισµό της ακριβής θέσης και αίσθηση της ταχύτητας του ροµπότ. Άλλη ιδιότητα του συστήµατος κίνησης είναι το ότι είναι διαφορικό. Αυτό σηµαίνει ότι δεν υπάρχει κάποιο τιµόνι για τον έλεγχο της στροφής του ροµπότ. Η στροφή επιτυγχάνεται µε την απενεργοποίηση του ενός από τους δυο τροχούς και ο άλλος να διατηρεί την κίνησή του. Τέλος οι τροχοί που ελέγχονται από τα µοτέρ έχουν διάµετρο 4 ίντσες και είναι φτιαγµένοι από µαλακό αλλά στερεό λάστιχο, για καλό κράτηµα και χαµηλή συµπίεση. Αισθητήρες(Sonar) Σχήµα 2.5 Αισθητήρες και γωνίες βολής τους Το Amigobot είναι εφοδιασµένο µε 8 αισθητήρες. Για την ακρίβεια είναι κάποιου είδους ηχοβολιστικά. Είναι τοποθετηµένοι σε σταθερές θέσεις: ένας σε κάθε πλευρά, τέσσερις που κοιτάζουν µπροστά και δυο που κοιτούν στη πίσω πλευρά. Όλοι µαζί εξασφαλίζουν στο ροµπότ 360 µοίρες αίσθησης. Η συχνότητα µετάδοσης σήµατος των αισθητήρων αυτών είναι 25 Hz (40ms για κάθε αισθητήρα) και µπορούν να εντοπίσουν αντικείµενα τα οποία βρίσκονται σε απόσταση 10cm ως 5 µέτρα µακριά από το ροµπότ. Όταν κάποιος αισθητήρας δεν λάβει πίσω σήµα επιστρέφει µια τιµή >6 µέτρων και σηµαίνει ότι είναι εκτός εύρους επιρροής. Αντικείµενα που βρίσκονται σε µικρότερη απόσταση από 10cm από το ροµπότ θεωρούνται και αυτά εκτός εύρους και επιστρέφεται και πάλι µια τιµή >6µέτρων. Η ευαισθησία των αισθητήρων ελέγχεται από ένα πίνακα. Μπορούµε να µεταβάλουµε την ευαισθησία αυτή ανάλογα µε τις ανάγκες µας. Αυτό µπορούµε να το επιτύχουµε µε την βοήθεια µιας βίδας διαµέσου µιας τρύπας πάνω και µπροστά του ροµπότ. Αυξάνοντας την ευαισθησία των αισθητήρων µπορούµε να πάρουµε µικρότερα αντικείµενα ή αντικείµενα σε µεγαλύτερη απόσταση. Υπάρχει όµως και ο κίνδυνος να παίρνουµε ενδείξεις που θα µας φαίνονται παράξενες. Αυτές θα οφείλονται κυρίως σε ανωµαλίες του εδάφους ή ακόµα και σε αντανακλάσεις του φωτός. Ο µόνος τρόπος να - 11 -

λύσουµε αυτό το πρόβληµα είναι να µειώσουµε την ένταση της ευαισθησίας του ροµπότ. Ασύρµατες συσκευές επικοινωνίας(radio modems) Σχήµα 2.6 Συσκευή ασύρµατης επικοινωνίας στο ροµπότ Το Amigobot υποστηρίζει ασύρµατο έλεγχο του ροµπότ µε την βοήθεια δυο συσκευών επικοινωνίας. Η µια συσκευή βρίσκεται πάνω στο ροµπότ και η άλλη είναι ενωµένη µε τον ηλεκτρονικό υπολογιστή. Η συσκευή που βρίσκεται στο ροµπότ εφαρµόζεται τέλεια από κάτω του και παίρνει σήµα και ενέργεια από ένα connector που τον ενώνει µαζί µε το ροµπότ. Μικροεπεξεργαστής Το βασικότερο µέρος του ροµπότ. Είναι ένας I/O-rich 20-MHz Hitachi H8 microprocessor και είναι υπεύθυνος για όλες τις επεξεργασίες που χρειάζονται να γίνουν στο ροµπότ. Ενεργοποιεί και ελέγχει τόσο την οδήγηση(µοτέρ) όσο και τους αισθητήρες του ροµπότ. Το λειτουργικό σύστηµα συµπληρώνεται µε τα 16Κ RAM και 64K FLASH on-chip µνήµη, µε επιπρόσθετο 1Μ εξωτερικό FLASH 2.3 Λογισµικό ( Software ) Amigobot Θα µιλήσουµε τώρα για το λογισµικό µέρος που αφορά το Amigobot. Θα περιγράψουµε και θα αναλύσουµε το ενσωµατωµένο λειτουργικό σύστηµα και το λογισµικό που χρησιµοποιείται για τον προγραµµατισµό του ροµπότ αυτού. - 12 -

Λειτουργικό σύστηµα του ροµπότ (AmigOS) Το Amigobot είναι εξοπλισµένο µε το AmigOS, ένα λειτουργικό σύστηµα που ελέγχει όλα τα χαµηλού επιπέδου συστήµατα και ηλεκτρονικά του ροµπότ. Είναι φυλαγµένο στο FLASH ROM, όπως και οι ήχοι και οι λειτουργικές παράµετροι, και είναι ενηµερώσιµο µε ειδικά προγράµµατα. Περιέχει τα δικά του προγράµµατα τα οποία µπορούν να χειριστούν αυτόνοµα το ροµπότ χωρίς την ανάγκη άλλης υπολογιστικής µηχανής. Τα χρησιµοποιεί κυρίως για να ελέγχει το Σχήµα 2.7 Αρχιτεκτονική Client/Server υλικά µέρη του ροµπότ επιτρέποντάς του, µε µια απλή ρουτίνα, να κινείται αυτόνοµα µέσα στο χώρο αποφεύγοντας εµπόδια και παίζοντας κάποιους ήχους. Αρχιτεκτονική client-server Παρόλο ότι µπορούµε να προγραµµατίσουµε το λειτουργικό σύστηµα και να έχουµε ένα αυτόνοµο ροµπότ, πολλοί προτιµούν να χρησιµοποιούν το ροµπότ µε την µέθοδο Client Server. Για αυτό το λόγο αναπτύχθηκε µια αρχιτεκτονική client-server. Όλα τα ροµπότ της οικογένειας του Amigobot χρησιµοποιούν µια έξυπνη αρχιτεκτονική client/server η οποία αναπτύχθηκε από τον Dr. Kurt Konolige. Στο µοντέλο αυτό ο εξυπηρετητής δουλεύει για να ελέγχει όλες τις χαµηλού επιπέδου λεπτοµέρειες του συστήµατος του ροµπότ. Σε αυτές συµπεριλαµβάνονται ο χειρισµός των µοτέρ, η µετάδοση των αισθητήρων και η συλλογή των κωδικοποιηµένων δεδοµένων από τους αισθητήρες και τα µοτέρ. - 13 -

Με αυτή τη αρχιτεκτονική, οι προγραµµατιστές εφαρµογών υψηλού επιπέδου για ροµπότ, δεν χρειάζονται να ξέρουν πολλές λεπτοµέρειες όσο αφορά κάποιο συγκεκριµένο ροµπότ-εξυπηρετητή. Δίδεται παρόλα αυτά η δυνατότητα να δηµιουργήσει κάποιος προγράµµατα τα οποία να φορτώσει στο λειτουργικό σύστηµα του ροµπότ και να το αφήσει να δουλεύει αυτόνοµα. Ασύρµατη Επικοινωνία Α) Πακέτα Επικοινωνίας Οι εξυπηρετητές επικοινωνούν µε τα client applications χρησιµοποιώντας ειδικά πακέτα. Είναι τα πακέτα µε εντολές από τον client στον server και τα πακέτα µε πληροφορίες(sips) από τον server στον client. Τα δύο αυτά ήδη πακέτων είναι σειρές από bits και χωρίζονται σε 4 βασικά µέρη: Header(2 bytes) Μετρητής που µας δείχνει τον αριθµό των bytes στις εντολές / δεδοµένα(1 byte) Δεδοµένα από τον client ή τον server Checksum (2 bytes). Στο Πίνακα 2.1 φαίνεται καλύτερα η δοµή και περιγραφή, µε περισσότερη λεπτοµέρεια, των µερών του πακέτου. Μέρος Bytes Τιµή Περιγραφή Header 2 0xFA, 0xFB Η κεφαλή του πακέτου. Client και Server χρησιµοποιούν την ίδια κεφαλή. Byte Count 1 N+2 Ο αριθµός των bytes των δεδοµένων που στέλνονται, συµπεριλαµβανοµένου και του checksum. Το µέγιστο είναι 200 bytes. Δεδοµένα Ν command or information Το µέρος αυτό περιέχει τις εντολές από τον client ή τις πληροφορίες από τον εξυπηρετητή. Checksum 2 υπολογίζεται Έλεγχος εγκυρότητας πακέτου. Πίνακας 2.1. Βασικά µέρη πακέτου επικοινωνίας του AmigOS - 14 -

Β) Σφάλµατα στα πακέτα Το AmigOS τα πακέτα που έρχονται από τον client και το µέγεθός τους ξεπερνά τα 200 bytes ή έχουν εσφαλµένο έλεγχο εγκυρότητας. Το ίδιο κάνει και ο client όταν παίρνει εσφαλµένα πακέτα από τον εξυπηρετητη. Το AmigOS δεν στέλνει επιβεβαίωση στον αποστολέα µετά από την παραλαβή κάποιου πακέτου, αλλά ούτε και διαθέτει κάποιο τρόπο να αναγνωρίζει κάποια επιβεβαίωση που θα του σταλεί. Έτσι µπορούµε να πούµε ότι η επικοινωνία µεταξύ client/server είναι τόσο αξιόπιστη όσο στο physical communication link. Αν η ένωση µεταξύ του υπολογιστή και του ροµπότ γίνεται µέσω ενός καλωδίου τότε έχουµε αρκετά αξιόπιστη επικοινωνία. Αν όµως χρησιµοποιείται ασύρµατη επικοινωνία τότε παίρνουµε λιγότερη αξιοπιστία. Εποµένως αν έχουµε ασύρµατη επικοινωνία δεν πρέπει να περιµένουµε να λάβουµε όλα τα πακέτα πληροφορίας που θα στέλνονται από τον εξυπηρετητή, αλλά και ούτε να περιµένουµε τον εξυπηρετητή να λάβει όλα τα πακέτα οδηγιών που θα του στείλουµε. Το να µην στέλνεται επιβεβαίωση οφείλεται στο γεγονός ότι έχουµε real-time επικοινωνία στη διαπροσωπία client/server. Θα ήταν αχρείαστο να ξαναστέλνουµε τα χαµένα πακέτα αφού τα παλιά δεδοµένα θα ήταν ουσιαστικά άχρηστα στη διατήρηση της ανταπόκρισης στη διαπροσωπία client/server. Αναπτύχθηκε όµως µια απλή τακτική ως λύση για τα χαµένα πακέτα. Σύµφωνα µε την τακτική αυτή οι περισσότερες εντολές που λαµβάνονται από τον εξυπηρετητή µεταβάλλουν κάποιες µεταβλητές καταστάσεων που βρίσκονται στον εξυπηρετητή. Ο εξυπηρετητής βάζει τις µεταβλητές αυτές µέσα στα πακέτα πληροφόρησης τα οποία και στέλνει στο λογισµικό που τρέχει στον client. Τότε το λογισµικό εξετάζει τις µεταβλητές αυτές, µε τη βοήθειά τους εντοπίζει τις εντολές που αγνοήθηκαν και τις ξαναστέλνει µέχρι να πετύχει την σωστή κατάσταση. Γλώσσες Προγραµµατισµού του Ροµπότ Όπως είπαµε και πιο πάνω το να χειριστείς το λειτουργικό σύστηµα του ροµπότ σε χαµηλό επίπεδο είναι πάρα πολύ δύσκολο. Έτσι δηµιουργήθηκαν λογισµικά κατάλληλα να επικοινωνούν µε το AmigOS και να του µεταδίδουν τις εντολές τις οποίες ο προγραµµατιστής θα µπορεί να γράψει σε γλώσσες ψηλού επιπέδου. Μερικά - 15 -

από τα λογισµικά που είναι σχεδιασµένα να επικοινωνούν µε τέτοιου είδους ροµπότ είναι το Saphira και το Ayllu. Το Saphira είναι το λογισµικό που χρησιµοποιήθηκε στην διπλωµατική αυτή εργασία και θα µιλήσουµε για αυτό εκτενέστερα πιο κάτω. Το Ayllu είναι το λογισµικό που εκδίδει η Activmedia. Το Saphira είναι ένα λογισµικό το οποίο είναι βασισµένο στο Aria, ένα χαµηλού επιπέδου σύστηµα ελέγχου ροµπότ γραµµένο από την ActivMedia Robotics. Το Aria περιλαµβάνει πολλές από τις χαµηλού επιπέδου διεργασίες που υπήρχαν στο Saphira, αλλά και νέές δυνατότητες όπως τον έλεγχο πολλών ροµπότ ταυτόχρονα. Έτσι, αφού το Aria µπορεί να δώσει ευέλικτη πρόσβαση στις χαµηλού επιπέδου λειτουργίες του ροµπότ, το Saphira απλοποιεί περισσότερο το έργο των προγραµµατιστών προσφέροντάς τους κάποια εύκολη διαπροσωπία σε πολλές από τις λειτουργίες αυτές. Γράφτηκε (ANSI C++), διατηρήθηκε και συνεχώς ενηµερώνετε από την SRI International s Artificial Intelligence Center. Χρησιµοποιεί το περιβάλλον client/server. Η βιβλιοθήκη του Saphira είναι ένα σύνολο από ρουτίνες για να που βοηθούν στην δηµιουργία προγραµµάτων client. Η βιβλιοθήκη του Saphira περιλαµβάνει ένα αριθµό λειτουργιών του Aria χρήσιµων για την αποστολή εντολών στον server και παραλαβή πληροφοριών από τους αισθητήρες του ροµπότ και αποκωδικοποίησή τους. Τις πληροφορίες που παραλαµβάνει τις παρουσιάζει σε ένα παράθυρο σε εικονική µορφή για καλύτερη διαπροσωπία µε τον χρήστη. Επιπρόσθετα το Saphira υποστηρίζει υψηλότερου επιπέδου λειτουργίες για έλεγχο του ροµπότ και ερµηνεία των αισθητήρων, περιλαµβάνοντας την διαπροσωπία Colbert και τα συστήµατα προσανατολισµού και τοπολογίας βάση χαρτών. Συνοπτικά το Saphira ενώνεται σε ένα robot server µε τα βασικά στοιχεία για αίσθηση και περιήγηση του ροµπότ (µοτέρ και τροχοί, αποκωδικοποιητές θέσης, αισθητήρες). Ο server ελέγχει τις χαµηλού επιπέδου λεπτοµέρειες της αίσθησης και οδήγησης του ροµπότ, στέλνει πληροφορίες και απαντά στο Saphira µέσω της διαπροσωπίας Aria. Η γλώσσα προγραµµατισµού του ροµπότ, η Colbert, είναι µια C-like γλώσσα για γράψιµο προγραµµάτων που να ελέγχουν το ροµπότ. Με το Colbert, οι χρήστες καλούνται να γράψουν και να τρέψουν συναρτήσεις γνωστές ως activities. Οι - 16 -

συναρτήσεις αυτές µπορούν να ξεκινήσουν ή να σταµατήσουν άµεσες ενέργειες του ροµπότ, χαµηλού επιπέδου «συµπεριφορές» του ροµπότ και άλλες συναρτήσεις. Μέσω του Colbert οι χρήστες µπορούν να συνδέσουν βιβλιοθήκες γραµµένες σε C++ στα προγράµµατά τους. Οι βιβλιοθήκες γραµµένες σε C++ γλώσσα αποτελούν ένα πολύ βοηθητικό εργαλείο. Βοηθούν στην χρήση δοµών που δεν προσφέρονται από το Colbert και στη δηµιουργία συναρτήσεων που µπορούν να χρησιµοποιηθούν και µέσω του Colbert. Συµπεριλαµβάνοντας τις βιβλιοθήκες Saphira και Aria κάποιος χρήστης στις βιβλιοθήκη που θέλει να δηµιουργήσει µπορεί να ελέγξει χαµηλού επιπέδου λειτουργίες του ροµπότ ακόµα και από την ίδια την βιβλιοθήκη. Μπορεί ακόµα να λάβει πληροφορίες αναφορικά µε την τοπολογία και τους αισθητήρες του ροµπότ. Το κυριότερο όµως πλεονέκτηµα της χρήσης της γλώσσας C++ είναι η δηµιουργία «συµπεριφορών» του ροµπότ. Αντίθετα από τις εντολές που έχουν άµεσο αποτέλεσµα στη κίνηση του ροµπότ, έχουµε και πιο πολύπλοκες εντολές οι οποίες κοµµατιάζονται σε µικρότερες εντολές όπου η καθεµιά προτείνει την κίνηση που πρέπει να γίνει. Οι εντολές αυτές ονοµάζονται «εντολές συµπεριφοράς» και καθορίζουν τη συµπεριφορά που θα έχει το ροµπότ σε εξωτερικά ερεθίσµατα. Οι εντολές αυτές υλοποιούνται στο Aria. Το µικρότερο κοµµάτι µιας συµπεριφοράς(behavior) ονοµάζεται action. Τα actions υλοποιούνται ως αντικείµενα και οι τύποι τους είναι οι κλάσεις των αντικειµένων αυτών. Υπάρχει µια βασική κλάση από την οποία κληρονοµούν όλες οι actions και αυτή είναι η ArAction. Οι Ενέργειες Συµπεριφοράς είναι οι ίδιες όπως αυτές του Άµεσου Ελέγχου του ροµπότ, που είναι η ταχύτητα µετακίνησης και θέση, και ταχύτητα περιστροφής και κατεύθυνση όρασης. Όµως οι έξοδοι των εντολών συµπεριφοράς µπορεί να έχουν αυτές τις ενέργειες συνδυασµένες. Έτσι είναι σηµαντικό ότι κάποιο συγκεκριµένο σύνολο ενεργειών που πρόκειται να εκτελεστούν να χρησιµοποιούν τον ίδιο έλεγχο σε κάθε κανάλι. Για παράδειγµα δεν µπορούν να συνδυαστούν, µια action που προσπαθεί να ελέγξει την κατεύθυνση όπου θα βλέπει το ροµπότ και µια action που προσπαθεί να ελέγξει την ταχύτητα περιστροφής του ροµπότ. Τέλος οι έξοδοι των actions συνδυάζονται µε την βοήθεια ενός resolver ο οποίος µπορεί να θέσε και κάποιες προτεραιότητες στις ενέργειες που θα εκτελεστούν. Στην διπλωµατική αυτή εργασία γίνεται σηµαντική χρήση της ιδιότητας αυτής που µας - 17 -

προσφέρει η C++. Θα δούµε παρακάτω ποιες ενέργειες υλοποιήσαµε µε αυτή την τεχνική και για πιο λόγο. - 18 -

Κεφάλαιο 3 Αλγόριθµος 3.1 Γενική Ιδέα Αλγορίθµου 19 3.2 Σχεδιαγράµµατα Καταστάσεων 20 3.3 Φόρτωµα κατάλληλων Βιβλιοθηκών και Καθολικές Μεταβλητές 31 3.4 Χάρτης Δωµατίου 35 3.5 Συµπεριφορές (Actions) και Συναρτήσεις (Activities) 36 3.6 Εντοπισµός προσώπου (Κλάση SfTrackPersonAction) 38 3.7 Χάσιµο προσώπου και τρόπος εύρεσής του (Κλάση SfKeepTurningAction) 55 3.8 Παρουσίαση εκθεµάτων (Κλάση SfExhibitIntroduceAction) 60 3.9 Κίνηση προς τα εµπρός (Κλάση SfForwardAction) 69 3.10 Αποφυγή εµποδίων (Κλάση SfAvoidObstacles) 72 3.11 Αρχική κατάσταση (Activity Initial() ) 75 3.12 Περιήγηση στον εκθεσιακό χώρο (Activity StartGuide() ) 77 3.13 Αντιδράσεις του ροµπότ 78 3.14 Επιστροφή στην αρχική κατάσταση ( Activity GoHome() ) 85 3.15 Ενέργειες για αποφυγή µπλοκαρίσµατος ( Activity Unstuck() ) 86 3.16 Καθολικές Συναρτήσεις της δυναµικής βιβλιοθήκης 89 3.17 Προσανατολισµός του ροµπότ στο χώρο 90 3.1 Γενική Ιδέα Αλγορίθµου Όπως περιγράψαµε και στην εισαγωγή σκοπός µας είναι να προγραµµατίσουµε το ροµπότ έτσι ώστε να κινείται έξυπνα µέσα σ ένα εκθεσιακό χώρο. Με τον όρο «έξυπνα» εννοούµε φυσικά να έχει το ροµπότ την δυνατότητα να ενηµερώνει τους επισκέπτες για τα εκθέµατα του χώρου, να κάνει τυχαίες κινήσεις ξαφνιάζοντας τους επισκέπτες, να µπορεί να εντοπίζει κάποιο επισκέπτη εκτελώντας κάποια ενέργεια προς - 19 -

αυτόν και γενικά να µπορεί να κινείται στον χώρο αποφεύγοντας τυχόν εµπόδια που θα βρίσκει στο δρόµο του. Για να καταφέρουµε όλα τα πιο πάνω θα έπρεπε πρώτα να αναγνωρίσουµε τα προβλήµατα που θα έπρεπε να προσέξουµε και µετά να σκεφτούµε τρόπους και αλγόριθµους επίλυσής τους. Ο αλγόριθµος που θα περιγράψουµε καλύπτει τα περισσότερα από τα προβλήµατα ώστε να έχουµε µια αρκετά σωστή απόκριση του ροµπότ. Το πρώτο µέληµα µας ήταν να αξιοποιήσουµε µε τέτοιο τρόπο τους αισθητήρες του ροµπότ ώστε να του δώσουµε την δυνατότητα να αναγνωρίζει τα εµπόδια που εντοπίζει. Ο αλγόριθµος επιλύει αυτό το πρόβληµα µε το να ελέγχει τις τοµές µεταξύ των ενδείξεων των αισθητήρων και των ευθειών του χάρτη. Αν η ευθεία µεταξύ του ροµπότ και του σηµείου της ένδειξης του αισθητήρα τέµνει κάποιον από τους τοίχους τότε η ένδειξη προέρχεται από τον τοίχο αυτό αλλιώς προέρχεται από κάποιο αντικείµενο µέσα στο χώρο. Αφού όµως ο χώρος µας είναι αρχικά άδειος σηµαίνει ότι αυτό που εντοπίσαµε είναι επισκέπτης. Με αυτό τον τρόπο µπορούµε να δώσουµε «εικονικά µάτια» στο ροµπότ ώστε να µπορεί να ξεχωρίζει πότε µια ένδειξη έρχεται από κάποιο αντικείµενο του χάρτη και πότε από κάποιο επισκέπτη του εκθεσιακού µας χώρου. Όσο για τα εµπόδια που θα βρίσκει το ροµπότ στο δρόµο του ο αλγόριθµός µας φροντίζει να τα αντιµετωπίσει. Έτσι όταν το ροµπότ βρεθεί σε κάποια απόσταση από κάποιο αντικείµενο πρώτο µέληµα του είναι να το αποφύγει αλλάζοντας κατεύθυνση. Με αυτό τον τρόπο αποφεύγονται οι συγκρούσεις µε αντικείµενα του περιβάλλοντος του ροµπότ. Θα αναλύσουµε πιο κάτω µε περισσότερη λεπτοµέρεια τον αλγόριθµο έτσι ώστε να κατανοήσουµε καλύτερα τις διάφορες συµπεριφορές και ενέργειες του ροµπότ. 3.2 Διαγράµµατα Καταστάσεων 3.2.1 Διάγραµµα Καταστάσεων Ολικού Προγράµµατος - 20 -

Start UnStuck EXIT PROG No Battery > 10V? Yes Person Detected? No Start Initial() No turnto (initialtheta) Yes Start GuideStart GradStatus 2 or 3 Start Gradient Start GoHome Yes Exit GuideStart Available Exhibits? Yes No No Battery > 10V? Yes Random Pattern 0-6 Pattern = 0 Start IntroduceExhibit Pattern = 1 Start WanderBot Pattern = 2 Start actfriendly Choose Pattern Start Aggressive Pattern = 4 Pattern = 3 Start GoCrazy Pattern = 5 Start Speak Stop Robot Σχήµα 3.1 Γενικό Διάγραµµα Καταστάσεων - 21 -

Το πιο πάνω σχήµα µας παρουσιάζει το διάγραµµα καταστάσεων ολόκληρου του προγράµµατός µας. Οι καταστάσεις που είναι µαρκαρισµένες µε κόκκινα γράµµατα θα αναλυθούν περαιτέρω πιο κάτω. Το πρόγραµµα µας ξεκινά από την κατάσταση Initial η οποία είναι και µαρκαρισµένη µε διπλή γραµµή. Μετά µπαίνουµε στην κατάσταση Unstuck η οποία θα εκτελείται σε όλη την διάρκεια ζωής του προγράµµατος µας. Δεν σταµατούµε σε αυτή την κατάσταση αλλά την αφήνουµε να τρέχει από πίσω. Προχωρούµε µετά στην επανάληψη η οποία έχει σαν έλεγχο την ένταση του ρεύµατος της µπαταρίας. Στον έλεγχο αυτό αν η µπαταρία του ροµπότ έχει πέσει κάτω απó 10Volts τότε τερµατίζουµε το πρόγραµµά µας αλλιώς προχωρούµε στον επόµενο έλεγχο. Στον έλεγχο που φτάνουµε κοιτάζουµε αν υπάρχει κάποιο αντικείµενο µπροστά από το ροµπότ σε κάποια προκαθορισµένη απόσταση. Αν ο έλεγχος αυτός είναι αρνητικός τότε παραµένουµε σε αυτόν µέχρι να εντοπιστεί το αντικείµενο. Όταν τελικά εντοπίσουµε το αντικείµενο το ροµπότ µας µπαίνει στην κατάσταση του ξεναγού. Και πάλι εδώ βρίσκουµε µια επανάληψη η οποία εκτελείται µόνο όταν η µπαταρία του ροµπότ µας επιτρέπει να εκτελέσουµε κινήσεις. Αν ο έλεγχος δεν µας επιτρέψει να προχωρήσουµε τότε θα µας οδηγήσει έξω από την κατάσταση του ξεναγού. Σε αντίθετη περίπτωση θα µεταφερθούµε σε µια κατάσταση επιλογής κάποιου τυχαίου αριθµού από το 0-6 ο οποίος θα αντιπροσωπεύει το pattern που θα εκτελέσουµε. Αφού πάρουµε τον αριθµό µεταβαίνουµε στον έλεγχο ύπαρξης εκθεµάτων προς παρουσίαση. Αν δεν υπάρχουν εκθέµατα προς παρουσίαση οδηγούµαστε έξω από την κατάσταση ξεναγού. Σε αντίθετη περίπτωση επιλέγουµε και εκτελούµε το pattern στο οποίο αντιστοιχεί ο αριθµός που έχουµε. Μετά από κάθε pattern το ροµπότ σταµατά και µεταφερόµαστε ξανά στον έλεγχο της µπαταρίας για να κλείσει έτσι η επανάληψη. Όταν βγούµε από την κατάσταση του ξεναγού θα µεταφερθούµε στην κατάσταση επιστροφής στο σπίτι. Το σπίτι του ροµπότ είναι η θέση από όπου είχε αρχικά ξεκινήσει. Από αυτή θα καλεστεί η Gradient η οποία θα οδηγήσει προσεχτικά το ροµπότ στη θέση που επιθυµούµε. Προχωρούµε µετά στον έλεγχο κατά πόσο το status του Gradient είναι ίσο µε 2 ή 3 που σηµαίνει ότι το ροµπότ έχει φτάσει ή δεν µπορεί να φτάσει στο στόχο του. Αν δεν έχουµε κάποια από αυτές τις δυο περιπτώσεις τότε παραµένουµε στον έλεγχο αυτό αλλιώς προχωρούµε να στρίψουµε το ροµπότ στην αρχική του γωνιά. Μετά από αυτό φτάνουµε στην αρχική επανάληψη και στον έλεγχο της µπαταρίας. - 22 -

3.2.2 Διάγραµµα Καταστάσεων Συνάρτησης Unstuck Start Unstuck Is Motor Stalled? No Set Stuck flag=false Yes No Move(-100) noblock Is Motor Stalled? Yes Move(100) Turn(30) Yes Left Dist >Right Dist No Turn(-30) Σχήµα 3.2 Διάγραµµα Καταστάσεων Συνάρτησης Unstuck Το σχήµα 3.2 δείχνει µε λεπτοµέρεια τις καταστάσεις από τις οποίες περνά το ροµπότ για να µπορέσει να επαναφέρει από περίπτωση µπλοκαρίσµατος. Στις καταστάσεις όπου υπάρχουν κινήσεις εννοούµε ότι η κίνηση ξεκινά από εκείνο το σηµείο. Η αρχική κατάσταση και εδώ µαρκάρετε µε διπλή γραµµή. Δεν έχουµε εδώ καµιά κατάσταση που να χρειάζεται περαιτέρω ανάλυση. Στους ελέγχους που γράφουν Is Motor Stalled εννοούµε ότι ελέγχουµε και τα δυο µοτέρ. Η συνάρτηση θα περιγραφεί µε λεπτοµέρεια σε επόµενα υποκεφάλαια αυτού του κεφαλαίου. - 23 -

3.2.3 Διάγραµµα Καταστάσεων Pattern IntroduceExhibit Available Exhibits? No Set exhibit flag = false Start IntroduceExhibit Deactivate Behavior Do not introduce Exhibit Yes Reset exhibit list Enable Behaviors No GradStatus=3 Start ExhibitIntroduce Available Exhibits? Yes Check GradStadus Enable Behaviors GradStatus=1,4 Remove Behavior Introduce Exhibit GradStatus=2 Get Nearest Exhibit GradStatus=0 Exit Pattern Start Gradient Σχήµα 3.3 Διάγραµµα Καταστάσεων Pattern IntroduceExhibit και της συµπεριφοράς ExhibitIntroduce Το διάγραµµα µας παρουσιάζει τις καταστάσεις στις οποίες θα βρεθούµε κατά την εκτέλεση του pattern που παρουσιάζει τα εκθέµατα. Ταυτόχρονα µας δείχνει και τις καταστάσεις της συµπεριφοράς ExhibitIntroduce(SfExhibitIntroduceAction) όταν αυτή καλείται από το Colbert. Οι επαναλήψεις δεν είναι λόγω κάποιας επανάληψης ορισµένης στον κώδικα µας αλλά λόγω των κύκλων εκτέλεσης του ροµπότ. Από την στιγµή που µια συµπεριφορά είναι ενεργή, εκτελείται η συνάρτηση fire που - 24 -

περιλαµβάνει, σε κάθε κύκλο µέχρι αυτή να απενεργοποιηθεί ή να εκτελεστεί κάποια εντολή άµεσης κίνησης. Η αρχική κατάσταση είναι µαρκαρισµένη µε διπλό κύκλο. 3.2.4 Διάγραµµα Καταστάσεων Pattern WanderBot Start WanderBot Enable Behaviors Start AvoidObstacles Start GoForward Remove Behaviors Wait random time 15-25s Exit Pattern Σχήµα 3.4 Διάγραµµα Καταστάσεων Pattern WanderBot Στο διάγραµµα αυτό υπάρχουν καταστάσεις που απαιτούν περαιτέρω ανάλυση. Συγκεκριµένα οι συµπεριφορές AvoidObstacles και GoForward θα αναλυθούν και θα συζητηθούν ξεχωριστά πιο κάτω. Το pattern αυτό στηρίζει την εκτέλεση του ουσιαστικά στον συνδυασµό των δυο συµπεριφορών και µετά από µια µικρή αδράνεια τις απενεργοποιεί και τελειώνει. 3.2.5 Διάγραµµα Καταστάσεων Pattern actfriendly Αυτό το διάγραµµα επικεντρώνεται περισσότερο σε άµεσες κινήσεις. Με κάθε µια από τις κινήσεις µεταφερόµαστε στην κατάλληλη κατάσταση. Μετά την κίνηση του rotate και µε την καθυστέρηση των 1,5s θα οδηγηθούµε στο τέλος του pattern. και εδώ η αρχική κατάσταση µαρκάρετε µε διπλό κύκλο. Δεν υπάρχουν εδώ καταστάσεις που να θέλουν περαιτέρω ανάλυση. - 25 -

Start actfriendly Turn(45) Play Music A B D Move(100) C Move(-100) Move(100) Turn(-90) E Move(-100) Rotate(240) Turn(45) Exit Pattern Wait 1,5s Σχήµα 3.5 Διάγραµµα Καταστάσεων Pattern actfriendly 3.2.6 Διάγραµµα Καταστάσεων Pattern Aggressive Start Aggressive Person Detected No Bark(Dog) Yes Move(100) Move(-100) Yes Too Near? turn(25) turn(25) No Speed(-50) turn(-50) Wait(15) Exit Pattern move(500) Σχήµα 3.6 Διάγραµµα Καταστάσεων Pattern WanderBot - 26 -

Το Aggressive είναι ένα pattern που κάνει το ροµπότ να φαίνεται εχθρικό. Έτσι είτε κάνει επίθεση είτε κάποια απότοµη κίνηση. Όταν είναι µακριά από το στόχο του τότε θα µπορεί να πάει προς τα εµπρός υπο τύπου επίθεσης. Αλλιώς κάνει κάποια απότοµη κίνηση. Ούτε και σε αυτό το διάγραµµα έχουµε αδιευκρίνιστες καταστάσεις. Οι περισσότερες κινήσεις είναι άµεσες ενώ υπάρχουν και κάποιες συνεχόµενες κινήσεις όπως είναι το speed και το rotate. 3.2.7 Διάγραµµα Καταστάσεων Pattern GoCrazy Start GoCrazy Enable Behaviors Start AvoidObstacles Start GoForward Start KeepTurning Remove Behaviors KeepTurning Deactivated Exit Pattern Σχήµα 3.7 Διάγραµµα Καταστάσεων Pattern WanderBot Το πιο πάνω διάγραµµα περιέχει συµπεριφορές οι οποίες πρόκειται να αναλυθούν. Γι µαρκάραµε µε κόκκινο τις συµπεριφορές των οποίων ακολουθούν τα σχεδιαγράµµατα καταστάσεων. Αυτό το pattern όπως φαίνεται εξαρτάται από τον συνδυασµό των κινήσεων των τριών συµπεριφορών. 3.2.8 Διάγραµµα Καταστάσεων Pattern Speak Οι συµπεριφορές και εδώ είναι µαρκαρισµένες µε κόκκινο αφού χρειάζονται ανάλυση. Η αρχική κατάσταση είναι µαρκαρισµένη µε διπλό κύκλο. Το ροµπότ εδώ βρίσκεται σε καταστάσεις στις οποίες ψάχνει για κάποιο επισκέπτη. Όταν χάσει το άτοµο που αρχικά εντόπισε τότε κάνει µικρές στροφές δεξιά και αριστερά στην προσπάθειά του - 27 -

να τον εντοπίσει ξανά. Αν δεν τα καταφέρει ή αν έφτασε πλέον πολύ κοντά στο άτοµο του µιλά επιλέγοντας τυχαία αυτά που θα πεί. Start Speak Enable Behaviors Start KeepTurning Start GoForward Start TrackPerson Yes Turned Around? TrackPerson Deactivated Say Something Yes No Person lost? No No Person Dist >600? Yes Turn Left Yes, No Person Detected? Yes Person Detected? Exit Pattern Turn Right No Σχήµα 3.8 Διάγραµµα Καταστάσεων Pattern Speak 3.2.9 Διάγραµµα καταστάσεων για Συµπεριφορά TrackPerson Στην συµπεριφορά TrackPerson σκοπός µας είναι ο εντοπισµός και η στροφή του ροµπότ προς κάποιο επισκέπτη. Στο σχήµα 3.9 φαίνονται οι καταστάσεις και οι έλεγχοι που θα κάνει το ροµπότ κατά την διάρκεια εκτέλεσής της. Η συµπεριφορά αυτή αντιπροσωπεύει την κλάση SfTrackPersonAction. - 28 -

Start TrackPerson Person Detected in front? No No Yes Person Distance <= 500 Yes NewAngle oldangle <=20 Yes No Person Detected aslant front? Yes No SetHeading =oldangle SetHeading =newangle SetVelocity =0(Stop) Deactivate Σχήµα 3.9 Διάγραµµα Καταστάσεων Συµπεριφοράς TrackPerson 3.2.10 Διάγραµµα Καταστάσεων Συµπεριφοράς KeepTurning Στο σχήµα 3.10 φαίνονται οι καταστάσεις στις οποίες µεταφέρεται το ροµπότ κατά την εκτέλεση της συµπεριφοράς KeepTurning. Σκοπός της συµπεριφοράς αυτής είναι να στριφογυρίσει το ροµπότ µέχρι να εντοπίσει κάποιο επισκέπτη ή µέχρι να κάνει µια πλήρη στροφή. Η συµπεριφορά αυτή αντιπροσωπεύει την κλάση SfKeepTurningAction. - 29 -

Start KeepTurrning Set new angle No Turn to initial angle Yes Made whole turn? No Person Detected? Yes Deactivate Set person angle Σχήµα 3.10 Διάγραµµα Καταστάσεων Συµπεριφοράς Keepturning 3.2.11 Διάγραµµα Καταστάσεων Συµπεριφοράς GoForward Start GoForward Set Desire Speed Set Desire Speed/2 Yes Near to obstacle? No Is stalled motor? No Set Speed to 0.(Stop) Yes Σχήµα 3.11 Διάγραµµα Καταστάσεων Συµπεριφοράς GoForward - 30 -

Το σχήµα 3.11 µας βοηθά να καταλάβουµε την λογική και τις καταστάσεις που έχει η συµπεριφορά GoForward. Αρχικά θέτει µια υψηλή ταχύτητα στο ροµπότ η οποία όµως µετά από τους ελέγχους µπορεί να µειωθεί ή ακόµα και να µηδενιστεί. Στον έλεγχο Is stalled motor ελέγχουµε και τα δύο µοτέρ. 3.2.12 Διάγραµµα Καταστάσεων Συµπεριφοράς AvoidObstacles No Start AvoidObstacles Too near to obstacle? Yes Set Speed to 0.(Stop Turn robot Σχήµα 3.12 Διάγραµµα Καταστάσεων Συµπεριφοράς AvoidObstacles Το τελευταίο διάγραµµα παρουσιάζει τις καταστάσεις στις οποίες µπορούµε να βρεθούµε κατά την εκτέλεση της συµπεριφοράς AvoidObstacles. Απλά εδώ γίνεται ο έλεγχος κατά πόσο βρισκόµαστε κοντά σε κάποιο αντικείµενο. Αν ο έλεγχος απαντήσει ναι τότε σταµατούµε το ροµπότ και κάνουµε επιτόπια στροφή. Και εδώ η επανάληψη δηµιουργείται λόγω των κύκλων εκτέλεσης του ροµπότ. 3.3 Φόρτωµα κατάλληλων στοιχείων και Καθολικές Μεταβλητές Όπως και σε άλλες γλώσσες προγραµµατισµού έτσι και στο Colbert πρέπει να ορίσουµε στην αρχή του προγράµµατος µας τυχόν βιβλιοθήκες, συναρτήσεις ή ακόµα και χάρτες που θα χρησιµοποιήσουµε. Επίσης πρέπει να ορίσουµε τις καθολικές µεταβλητές που θα χρησιµοποιήσει το πρόγραµµά µας. Φυσικά κάποιοι ορισµοί βιβλιοθηκών και δοµών - 31 -

έγιναν και στην δυναµική βιβλιοθήκη που γράφτηκε στην C++. Όλοι οι ορισµοί που χρειάστηκαν να γίνουν ήταν οι εξής: Βιβλιοθήκη GFuntions.dll (C++) #include "MyDefs.h" #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> #include <direct.h> WallsList *walllist; //The head of the list that holds walls artifacts Exhibit *exhibitlist; //The head of the list that holds the exhibits of the museum Η µόνη άγνωστη βιβλιοθήκη είναι η MyDefs.h. Οι WallsList και Exhibit είναι δύο δοµές οι οποίες ορίζονται στην βιβλιοθήκη MyDefs. Η πρώτη από τις δυο δηµιουργήθηκε για να κρατά τα στοιχεία των τοίχων του κόσµου και οι δεύτερη για να κρατά τα στοιχεία που αφορούν τα εκθέµατα που θα έχουµε. Πιο συγκεκριµένα η MyDefs είναι ορισµένη όπως φαίνεται πιο κάτω. /*MyDefs.h*/ #include "saphira.h" #include "sfclass.h" #define MAKE_LIBRARY #include "export.h" Στην βιβλιοθήκη αυτή περιλαµβάνεται η βασική βιβλιοθήκη Saphira.h η οποία, µε την βοήθεια της βιβλιοθήκης Aria.h, δίνει την δυνατότητα πρόσβασης σε χαµηλού επιπέδου λειτουργίες του ροµπότ όπως είναι η επικοινωνία µε τον µικροεπεξεργαστή ή η λήψη των ενδείξεων των αισθητήρων. Ακολουθούν οι δύο δοµές (structs) που θα µας βοηθήσουν να προσανατολίζουµε το ροµπότ στο χώρο µετά από κάθε κίνησή του. - 32 -

Επιπλέον µε τις βιβλιοθήκες αυτές θα µπορέσουµε να ελέγξουµε τις κινήσεις του ροµπότ και να το οδηγήσουµε στο χώρο. typedef struct walls SfWall *wall; struct walls *next; }WallsList; Η struct walls (WallsList) είναι υπεύθυνη να κρατά πληροφορίες σχετικά µε τους τοίχους που θα έχουµε στο χώρο στον οποίο θα κινείται το ροµπότ µας. Συγκεκριµένα, περιέχει ένα δείκτη σε ένα αντικείµενο SfWall και ένα δείκτη που µας δείχνει τον διπλανό κόµβο. Η κλάση SfWall είναι αυτή που µας προσφέρει όλες τις πληροφορίες που πρέπει να ξέρουµε για κάποιο τοίχο ώστε να µπορούµε να τον προσδιορίσουµε στον χώρο. Περιέχει τα σηµεία αρχής και τέλους του τοίχου όσο και την ταυτότητα του. Το πως παίρνουµε τα αντικείµενα SfWall θα το δούµε πιο κάτω. Εποµένως µε την βοήθεια της δοµής αυτής θα µπορέσουµε να δηµιουργήσουµε µια λίστα αποτελούµενη από παρόµοιες δοµές στην οποία θα έχουµε όλους τους τοίχους του χώρου µας και θα µπορούµε να τους διατρέχουµε όποτε χρειαζόµαστε πληροφορία για την θέση του ροµπότ σε σχέση µε αυτούς. typedef struct exhibit double x; double y; char introspeechnum[100]; char name[50]; bool introduced; struct exhibit *next; }Exhibit; Η struct Exhibit είναι η δοµή όπου κρατούµε πληροφορίες για κάποιο έκθεµα που βρίσκεται στον εκθεσιακό χώρο. Στην δοµή αυτή αποθηκεύουµε τις συντεταγµένες (x,y) του εκθέµατός µας, το όνοµα του αρχείου του ήχου παρουσίασής του, την - 33 -

ονοµασία του και αν το έκθεµα παρουσιάστηκε ή όχι. Τέλος ο δείχτης next µας ενώνει µε το επόµενο έκθεµα στη λίστα. Τα εκθέµατα τα διαβάζουµε από κάποιο αρχείο µε την βοήθεια της συνάρτησης loadexhibits την οποία θα περιγράψουµε σε επόµενο υποκεφάλαιο. Colbert loadworld Museum1; loadlib sfgrad; loadlib sfloc; loadlib GFunctions; loadlib testload; //need this for sfstalledmotor def Με το loadworld φορτώνουµε τον χάρτη που θέλουµε να χρησιµοποιήσουµε. Με αυτή την εντολή το Colbert δηµιουργεί τα Artifacts-Walls τα οποία και θα χρησιµοποιήσουµε αργότερα για να διαβάσουµε τις συντεταγµένες του κάθε τοίχου στον κόσµο που θα δουλέψουµε. Με το loadlib φορτώνουµε τις βιβλιοθήκες που θα χρειαστούµε. Οι βιβλιοθήκες sfgrad και sfloc προσφέρονται από το Saphira. Η πρώτη περιέχει την λειτουργία Gradient η οποία έχει σαν στόχο να βρίσκει το βέλτιστο µονοπάτι προς κάποιο στόχο και να καθοδηγεί το ροµπότ µέσω αυτού του µονοπατιού εκεί. Η δεύτερη βιβλιοθήκη χρησιµοποιεί την θεωρία του Markov Localization για να προσανατολίζει το ροµπότ στο χώρο που βρίσκεται χρησιµοποιώντας τα εξωτερικά του ερεθίσµατα (sonars). Οι δύο προαναφερθέντες βιβλιοθήκες χρησιµοποιούν και λαµβάνουν υπόψη τους τον χάρτη του δωµατίου. Τέλος φορτώνουµε και την δική µας δυναµική βιβλιοθήκη GFunctions και την βιβλιοθήκη του Colbert testload η οποία θα µας προσφέρει την χρήσιµη συνάρτηση για έλεγχο του µπλοκαρίσµατος ή όχι των µοτέρ. int CheckDist; CheckDist = 2000; //the max dist from the robot that we check for person int stuckflag; //flag that indicates if the robot is stuck or not int exhibits; //flag that indigates whether there are exhibits to intoduce or not - 34 -

//Pattern flags. Enables/Disables patterns int intro; int wand; int friend; int anger; int craz; int spk; intro = 1; wand = 0; friend = 0; anger = 0; craz = 0; spk = 0; //initial world cordinates of the robt float initialx; float initialy; float initialth; Ακολουθούν οι καθολικές µεταβλητές. Η CheckDist µας δίνει την µέγιστη απόσταση ελέγχου του ροµπότ. Το stuckflag µας λεει αν το ροµπότ είναι µπλοκαρισµένο ή όχι. Το exhibit flag θα το χρησιµοποιήσουµε για να βλέπουµε αν υπάρχουν εκθέµατα που δεν έχουµε παρουσιάσει ή αν έχουν παρουσιαστεί όλα. Οι σηµαίες που ακολουθούν θα µας βοηθήσουν να ενεργοποιούµε και να απενεργοποιούµε τα patterns που θέλουµε. Οι τελευταίες 3 µεταβλητές κρατούν τις αρχικές συντεταγµένες του ροµπότ (Χ,Υ) και την γωνία που βλέπει Theta. 3.4 Χάρτης Δωµατίου - 35 -

Σχήµα 3.13 Στο σχήµα 3.13 φαίνεται ο χάρτης του δωµατίου που χρησιµοποιούµε. Ο κύκλος στο κέντρο σχεδόν του δωµατίου αντιπροσωπεύει την αρχική θέση του ροµπότ και η γραµµή µέσα στον κύκλο την αρχική κατεύθυνση που κοιτάζει το ροµπότ. Τα πράσινα σηµάδια αντιπροσωπεύουν τις θέσεις των εκθεµάτων του χώρου. Ο χάρτης φυλάγεται και σε ένα αρχείο υπό µορφή πληροφορίας. Στο αρχείο αυτό µπορούµε να βρούµε τις πληροφορίες σχετικά µε τις θέσεις των τοίχων και των εκθεµάτων καθώς και την αρχική θέση του ροµπότ. Με την βοήθεια των πληροφοριών αυτών θα µπορούµε να καθοδηγούµε το ροµπότ προς τα εκθέµατα του χώρου αλλά και θα µπορούµε να αναγνωρίσουµε πότε παίρνουµε ένδειξη από κάποιο τοίχο και πότε όχι. Ο χάρτης αυτός θα παίξει σηµαντικό ρόλο στον προσανατολισµό του ροµπότ αλλά και στην συνάρτηση Gradient για την οποία θα µιλήσουµε πιο κάτω. Για να πάρουµε σωστά αποτελέσµατα πρέπει ο χάρτης µας να είναι ακριβείς σύµφωνα µε τις αποστάσεις του πραγµατικού χώρου. 3.5 Συµπεριφορές (Actions) και Συναρτήσεις (Activities) Για την υλοποίηση του προγράµµατος χρησιµοποιήθηκαν τόσο συµπεριφορές όσο και συναρτήσεις που θα βοηθούσαν το ροµπότ να εκτελεί τις σωστές ενέργειες. Όπως περιγράφηκε πιο πάνω οι συµπεριφορές (actions) είναι κλάσεις που υλοποιήθηκαν σε - 36 -

γλώσσα C++ ενώ οι συναρτήσεις (activities) υλοποιήθηκαν στην γλώσσα που δηµιουργήθηκε για το ροµπότ Colbert. Η χρήση των συµπεριφορών ήταν αποτέλεσµα της ανάγκης να έχουµε κάποιες συνεχείς, προτεινόµενες µε βάση κάποιους ελέγχους, κινήσεις από τις οποίες θα επιλεγόταν η καλύτερη ανάλογα µε την κατάσταση που θα βρισκόταν το ροµπότ. Όλες οι συµπεριφορές χρησιµοποιούν την συνάρτηση ArActionDesired *fire() µέσα στην οποία ορίζουν και επιστρέφουν την ενέργεια που επιθυµούν να εκτελεστεί. Σε κάθε κύκλο εκτέλεσης του ροµπότ αν µια συµπεριφορά είναι ενεργή τότε εκτελείται η συνάρτηση fire που περιλαµβάνει. Οι συναρτήσεις χρησιµοποιήθηκαν για τον έλεγχο των συµπεριφορών και για τις άµεσες ενέργειες που θα έπρεπε να εκτελεί το ροµπότ µε την µετάβασή του από µια κατάσταση σε κάποια άλλη. Οι συναρτήσεις ορίζουν την αρχική κατάσταση που θα βρίσκεται το ροµπότ, πότε θα πρέπει να ξεκινήσει την ξενάγηση, πότε θα πρέπει να ξεκινήσει να εκτελεί κάποιες συµπεριφορές και πότε θα πρέπει να σταµατήσει και να γυρίσει στην αρχική του θέση. Οι Συµπεριφορές που δηµιουργήθηκαν είναι: TrackPerson GoForward AvoidObstacles ExhibitIntroduce KeepTurning Οι Συναρτήσεις που δηµιουργήθηκαν είναι: InitialState StartGuide GoHome Unstuck Συµπεριφορές και Συναρτήσεις θα περιγραφούν µε µεγαλύτερη λεπτοµέρεια σε επόµενα υποκεφάλαια αυτού του κεφαλαίου. Εκτός από τα πιο πάνω ορίστηκαν και µερικές βοηθητικές συναρτήσεις στην δυναµική βιβλιοθήκη που δηµιουργήσαµε, οι οποίες δεν ανήκουν σε κάποια συγκεκριµένη - 37 -