Πολυτεχνείο Κρήτης Τμήμα ΗΜΜΥ Χειμερινό Εξάμηνο 2012-2013 Intelligence Lab Αυτόνομοι Πράκτορες Κουσανάκης Βασίλης 2006030096 Αναφορά εργασίας εξαμήνου Mobile robots Rat s life Mapping Localization Είναι ένας διαγωνισμός στον οποίο 2 robots (rat0, rat1 ) προσπαθούν να επιβιώσουν μέσα στο περιβάλλον του λαβυρίνθου. Το κάθε ρομπότ έχει μια μπαταρία η οποία το κρατάει ζωντανό. Όταν η μπαταρία αυτή εξαντληθεί το ρομπότ σταματάει να δουλεύει. Μέσα στον λαβύρινθο που κινούνται τα ρομπότ υπάρχουν πηγές τις οποίες αν ένα ρομπότ καταφέρει να εντοπίσει τότε φορτίζει και η μπαταρία του. Νικητής του διαγωνισμού είναι το ρομπότ του οποίου η μπαταρία διαρκεί περισσότερο. Ο λαβύρινθος ο οποίος δημιουργείται κατά την εκκίνηση του διαγωνισμού όπως και η θέση στην οποία εμφανίζονται οι 4 πηγές που υπάρχουν στον λαβύρινθο είναι άγνωστες. Άγνωστη είναι και η θέση στην οποία εμφανίζεται το κάθε robot. Η εργασία βασίστηκε στα εξής: 1) Localization 2) Mapping 3) Αναγνώριση των εμποδίων 4) Κίνηση στον λαβύρινθο.
Localization Η θέση του ρομπότ αρχικά είναι εντελώς άγνωστη. Για τον χειρισμό του εντοπισμού εγκαταστάθηκε ένας gps sensor ο οποίος βρίσκεται στο κέντρο του e- puck (robot). Οι τιμές οι οποίες παίρνει ο gps sensor είναι μεταξύ 0 και 1. Επίσης ο κόσμος του λαβυρίνθου (Σχήμα 2) θεωρήθηκε σαν ένας 2D πίνακας, της μορφής 10*10 (Σχήμα 1). Σχήμα 1: 2D πίνακας Σχήμα 2: Κόσμος λαβυρίνθου
Πιο συγκεκριμένα,οι τιμές που επιστρέφει το gps είναι τιμές για τις 3 διαστάσεις. Η τρίτη διάσταση δεν μας ενδιαφέρει στο παρόν πρόβλημα οπότε διαχειρίστηκαν πο τιμές για τους άξονες X,Y. Π.χ Η τιμή του gps δίνει Χ=0,95540, Υ = 0,73213 σύμφωνα με τον αλγόριθμο οι τιμές του localization γίνονται 0,2. Δηλαδή η θέση βρίσκεται στην πρώτη στήλη και στην τρίτη γραμμή του σχήματος 1. Mapping Θεωρώ ότι κάθε κελί μπορεί να έχει τοίχο ή και όχι σε κάθε μία από τις τέσσερις πλευρές του. Όταν βρεθεί τοίχος σε ένα κελί απεικονίζεται με 1, ενώ όταν δεν υπάρχει με 0. Για να θεωρηθεί ότι η πλευρά κάποιου κελιού είναι τοίχος θα πρέπει να έχω πάρει 30 μετρήσεις > 350 σε εκείνο το σημείο. Αυτό σημαίνει ότι το e-puck πρέπει να έχει πλησιάσει σε απόσταση ~ 0,025 m σε ένα εμπόδιο. Οι αισθητήρες που χρησιμοποιούνται για το mapping είναι τέσσερις από τους εφτά συνολικά που διαθέτει ενεργούς το e-puck. Αυτοί είναι οι 2 στο μπροστινό μέρος του rombot (ps7,ps0 ), ο ένας πλάγιος δεξιά (ps2) και ο πλάγιος αριστερά (ps5) (Σχήμα 3). Σχήμα 3: Αισθητήρες
Το e-puck εκτός από την ακριβή διεύθυνση για το που βρίσκεται επίσης γνωρίζει και την κατεύθυνση προς την οποία κινείται. Η υλοποίηση αυτή βοήθησε ιδιαίτερα στο να γίνεται γνωστό το σημείο του κελιού που βρίσκει εμπόδιο κάθε αισθητήρας. Όταν υπάρξει επιβεβαίωση ύπαρξης εμποδίου σε ένα κελί, γίνεται αποθήκευση του κελιού αυτού όπως και του σημείου όπου βρίσκεται ο τοίχος σε σχέση με το κελί ( Βόρεια,Νότια, Ανατολικά,Δυτικά) (Σχήμα 4). Σχήμα 4 Moving to South : X 6.0 Y 8.0 N 1.0 E 1.0 S 0.0 W 1.0 Κίνηση Η λογική της κίνησης είναι η εξής: όταν το e-puck βρει μπροστά του ένα εμπόδιο τότε αποφασίζει να στρίψει δεξιά ή αριστερά, αν δεν βρει κάποιο εμπόδιο προχωράει ευθεία. Χρησιμοποιήθηκαν οι τέσσερις αισθητήρες στο μπροστινό μέρος του e-puck, δηλαδή οι ps0,ps 1 και ps6,ps7. Οι δύο πρώτοι ελέγχουν αν υπάρχει εμπόδιο στα δεξιά του e-puck και όταν το άθροισμά του ξεπεράσει τα 1600 το e-puck στρίβει αριστερά. Αντίθετα, για τους ps6,ps7, αν το άθροισμά τους γίνει μεγαλύτερο από 1600 τότε το e- puck στρίβει δεξιά. Παρατηρήθηκε ότι το e-puck έπεφτε πολλές φορές σε deadlock όταν έφτανε στις γωνίες, καθώς και όταν οι ps6+ps7 > 1600 και ps0+ ps1 >1600. Όταν αντιληφθεί το e-puck αυτή την περίπτωση στρίβει δεξιά.
Αντιμετώπιση των πηγών Οι πηγές που υπάρχουν μέσα στον λαβύρινθο είναι τέσσερις, οι οποίες εμφανίζονται τυχαία μέσα σε αυτόν. Για να γίνει αντιληπτή μια πηγή από το e-puck έγινε χρήση της έγχρωμης κάμερας. Η κάμερα η οποία βρίσκεται στο μπροστινό μέρος του e- puck παίρνει εικόνες κάθε 32 ms. Κάθε εικόνας μπορεί να αναλυθεί σε RGB μοντέλο. Παρατηρήθηκε έπειτα από ελέγχους ότι η φωτεινή πηγή αναλύεται σε RGB ως εξής : Camera.pixelGetGreen(pixel) >= 200 && Camera.pixelGetGreen(pixel) <= 220) && (Camera.pixelGetBlue(pixel) >= 200 && Camera.pixelGetBlue(pixel) <= 220) && (Camera.pixelGetRed(pixel) >= 230 && Camera.pixelGetRed(pixel) <= 255 Η μπαταρία του e-puck αρχικά έχει τιμή 200, καθώς περνάει ο χρόνος πέφτει, όταν η τιμή της μπαταρίας πέσει κάτω από 100 μπορεί να φορτιστεί. Η τιμή της μπαταρίας όταν φορτίζεται δεν μπορεί να περάσει την τιμής 100. Αν το e-puck συναντήσει πηγή με μπαταρία μεγαλύτερη από 100 δεν μπορεί να φορτιστεί, όμως η πηγή κλείνει εφόσον το e- puck πλησιάσει αρκετά. Με γνώση αυτών των στοιχείων το e-puck όταν συναντήσει πηγή και η τιμή της μπαταρίας είναι μικρότερη από 115 σταματάει μπροστά στην πηγή και περιμένει μέχρι να φορτίσει. Αλλιώς καταγράφει την θέση της πηγής και συνεχίζει την περιήγηση στον λαβύρινθο. Όταν μια πηγή φορτίσει ένα e-puck κλείνει, και ανάβει ξανά έπειτα από συγκεκριμένο χρόνο. Όταν το e-puck πλησιάσει μια σβηστή πηγή και η τιμή της μπαταρίας του είναι μικρότερη από 30, σταματάει περιμένοντας μέχρι να ανάψει η πηγή. Η συμπεριφορά αυτή που υλοποιήθηκε έγινε πιστεύοντας ότι μακροπρόθεσμα θα ευνοηθεί το ρομπότ. Μελλοντική δουλειά Θα μπορούσαν σίγουρα να βελτιωθούν οι ήδη υλοποιημένοι αλγόριθμοι. Στο mapping πολλές φορές τα εμπόδια που ανιχνεύονται είναι αποτέλεσμα θορύβου. Ο αλγόριθμος της κίνησης είναι απλός και πέφτει σε αρκετά deadlock, θα μπορούσε να βελτιωθεί χρησιμοποιώντας πληροφορίες από το mapping. Στην αναγνώριση των πηγών, λόγο του ότι οι τοίχοι του λαβυρίνθου έχουν χρώματα πολλές φορές το e-puck αναγνωρίζει αυτούς αντί για πηγή, άρα θα μπορούσα να κάνω καλύτερη επεξεργασία των μετρήσεων. Η υλοποίηση path planning ήταν ένα από τα στοιχεία που θα μπορούσε να ενταχθεί στο πρόγραμμα.