Αναφορά Εργασίας Προγραμματισμού στο Μάθημα Αυτόνομοι Πράκτορες. 3D simulation League σε περιβάλλον SimSpark Simspark Localization Παπαδημητρίου Βασίλης ΑΜ: 2006030011 Περιβάλλον Simspark. To περιβάλλον έχει τις παρακάτω ιδιότητες : Μερικώς Παρατηρήσαμε. Διότι ο πράκτορας μας βλέπει κάθε φορά ένα μέρος του γηπέδου και όχι ολόκληρο Στοχαστικό Διότι αν εκτελέσουμε δυο φορές την ιδία ενεργεία δεν θα έχουμε το και τις δυο φορές το ίδιο αποτέλεσμα Ακολουθιακό Διότι η προηγούμενη ενεργεία επηρεάζει την επομένη Δυναμικό Διότι το περιβάλλον αλλάζει ακόμα και αν πράκτορας δεν κάνει καμία ενεργεία Συνεχές Διότι το περιβάλλον αλλάζει σε συνεχές χρόνο Πολυπρακτορικο Διότι στο ίδιο περιβάλλον συνυπάρχουν πολλοί πράκτορες
Γήπεδο Simspark: Το γήπεδο έχει διαστάσεις 21 x 12 m. Ο άξονας x [-10.5, 10.5 ] και ο άξονας y [-6,6]. Τα τέρματα έχουν διαστάσεις 2.1m πλάτος και 0.8m ύψος.o κύκλος της σέντρας έχει ακτίνα 1.5m.Επίσης υπάρχουν τέσσερις σημαίες στις γωνίες του γηπέδου τέσσερις σημαίες καθώς και τα τέσσερα δοκάρια(landmarks) αποτελούν πολύ σημαντικό κομμάτι για την υλοποίηση του localization. Στόχοι του Localization Εντοπισμός της θέσης του πράκτορα πάνω στο γήπεδο υπό την μορφή συντεταγμένων. Υπολογισμός της γωνίας υπό την όποια είναι στραμμένο το κεφάλι σε σχέση με τον οριζόντιο άξονα του γηπέδου Υπολογισμός της γωνίας υπό την όποια είναι στραμμένο το σώμα του πράκτορα σε σχέση με τον οριζόντιο άξονα του γηπέδου Υπολογισμός της θέσης της μπάλας υπό την μορφή συντεταγμένων Υπολογισμός της απόστασης της μπάλας από τον πράκτορα Υπολογισμός της γωνίας πράκτορα-μπάλας-γηπέδου Εντοπισμός της θέσης, γωνίας και απόστασης υπόλοιπων πρακτόρων σε σχέση με τον πράκτορα και διαχωρισμός αυτών σε αντίπαλους και συμπαίκτες.
Η χρησιμότητα αυτών το σκοπών είναι η δημιουργία διαφόρων στρατηγικών (Επιθετικός-αμυντικός-τερματοφύλακαςς) καθώς και η δημιουργία απαραίτητης πληροφορίας για να πλησιάσουμε και να κλωτσήσουμε την μπάλα προς το αντίπαλο τέρμα. Αντίληψη του πράκτορα για το περιβάλλον και για τον εαυτό του στο Simspark. O πράκτορας συνδέεται στον server στον όποιο γίνετε η προσομοίωση του παιχνιδιού, και αυτός του στέλνει όλη την πληροφορία για το περιβάλλον, το παιχνίδι και για τον ίδιο πίσω στον πράκτορα με μηνύματα. Τα μηνύματα έρχονται πίσω στον πράκτορα υπό την μορφή String.Τα μηνύματα έρχονται αν κύκλους των 20ms.Ένα τυπικό μήνυμα ενός κύκλου είναι το παρακάτω: (time (now 93.60)) (GS (t 0.00) (pm BeforeKickOff)) (hear 0.00 self 1000-501) (GYR (n torso) (rt -0.35-0.36-0.01)) (ACC (n torso) (a 0.20-0.20 9.79)) (HJ (n hj1) (ax 0.33)) (HJ (n hj2) (ax -3.31)) (See (G2R (pol 17.55-3.33 4.31)) (G1R (pol 17.52 3.27 4.07)) (F1R (pol 18.52 18.94 1.54)) (F2R (pol 18.52-18.91 1.52)) (B (pol 8.51-0.21-0.17))
(P (team teamred) (id 1) (head (pol 16.98-0.21 3.19)) (rlowerarm (pol 16.83-0.06 2.80)) (llowerarm (pol 16.86-0.36 3.10)) (rfoot (pol 17.00 0.29 1.68)) (lfoot (pol 16.95-0.51 1.32))) (P (team teamblue) (id 1) (rlowerarm (pol 0.18-33.55-20.16)) (llowerarm (pol 0.18 34.29-19.80)))) (HJ (n raj1) (ax 31.72)) (HJ (n raj2) (ax -20.12)) (HJ (n raj3) (ax -0.01)) (HJ (n raj4) (ax 40.04)) (HJ (n laj1) (ax 64.37)) (HJ (n laj2) (ax 19.96)) (HJ (n laj3) (ax 0.09)) (HJ (n laj4) (ax -40.11)) (HJ (n rlj1) (ax -0.06)) (HJ (n rlj2) (ax 20.31)) (HJ (n rlj3) (ax -39.24)) (HJ (n rlj4) (ax 20.02)) (HJ (n rlj5) (ax 0.04)) (FRP (n rf) (c 0.01-0.01-0.02) (f -0.21 0.21 19.77)) (HJ (n rlj6) (ax 0.21)) (HJ (n llj1) (ax -0.01)) (HJ (n llj2) (ax 0.00)) (HJ (n llj3) (ax 19.70)) (HJ (n llj4) (ax -41.02)) (HJ (n llj5) (ax 20.31)) (FRP (n lf) (c 0.01-0.01-0.02) (f -0.21 0.20 25.45)) (HJ (n llj6) (ax -0.16)) Πληροφορίες που περιέχονται μέσα στο μήνυμα. Το μήνυμα που λαμβάνουμε από τον server περιέχουν πληροφορίες για τους preceptors (αισθητήρες).οι preceptors χωρίζονται σε δυο βασικές κατηγορίες.general Perceptors και Soccer Perceptors General perceptors: GyroRate Perceptor Αισθητήρας γυροσκοπιου.μας επιστρέφει την γωνιακή επιτάχυνση στους τρεις άξονες. Χρηση:Αποθηκευεται και διαβάζεται συνεχώς ώστε να εντοπίσουμε αν υπήρξε κάποια πτώση του πράκτορα.
Γενική μορφή μηνύματος: (GYR (n <name>) (rt <x> <y> <z>)) π.χ: (GYR (n torso) (rt 0.01 0.07 0.46)) HingeJoint Perceptor Αισθητήρες αρθρωσεων.μας επιστρέφουν την γωνία για κάθε αρθρωσάσης ΝΑΟ έχει 22 τέτοιες αρθρώσεις. Χρηση:Απαραιτητη πληροφορία για την υλοποίηση των κινήσεων Γενική μορφή μηνύματος: (HJ (n <name>) (ax <ax>)) π.χ.: (HJ (n laj3) (ax -1.02)) ForceResistance Perceptor Αισθητήρες δυναμης.μας δίνουν πληροφορίες για το αν ασκείται δύναμη σε κάποιο σημείο στον πράκτορα. Χρηση:Εντοπισμος και αποφυγή συγκρούσεων. Γενική μορφή μηνύματος: (FRP (n <name>) (c <px> <py> <pz>) (f <fx> <fy> <fz>)) π.χ.: (FRP (n lf) (c -0.14 0.08-0.05) (f 1.12-0.26 13.07)) Soccer Perceptors: GameState Perceptors Μας δίνει πληροφορίες για τον χρόνο του παιχνιδιού καθώς και για την κατάσταση του παιχνιδιού(π.χ ημίχρονο) Χρήση: Απαραίτητη πληροφορία για την τήρηση των κανόνων του παιχνιδιού Γενική μορφή μηνύματος: (GS (t <time>) (pm <playmode>)) π.χ.: (GS (t 0.00) (pm BeforeKickOff)) Hear Perceptor Αισθητήρας «ακοής». Χρηση:Κυριο εργαλείο με το όποιο γίνετε η επικοινωνία του πράκτορα με τους συμπαίκτες. Γενική μορφή μηνύματος: (hear <time> self/<direction> <message>) π.χ.: (hear 12.3 self helloworld) (hear 12.3-12.7 helloyourself) Vision Perceptor Αισθητήρας ορασης.μας επιστρέφει πληροφορίες για όλα τα ορατά αντικείμενα στο οπτικό πεδίο του πρακτορα.ορατα αντικείμενα είναι η μπάλα,τα 4 δοκάρια, οι 4 σημαίες και οι υπόλοιποι πρακτορες.ο πράκτορας έχει οπτικό πεδίο εύρους 120 μοίρες στον οριζόντιο και στον κάθετο αξονα.και για κάθε αντικείμενο μας επιστρέφει τρεις τιμες.την απόσταση, την οριζόντια και κάθετη γωνία από το κέντρο του οπτικό πεδίο του πράκτορα.
Χρήση: Η πληροφορία μέσω της οποίας γίνεται η υλοποίηση του Localization Γενική μορφή μηνύματος: (See +(<name> (pol <distance> <angle1> <angle2>)) +(P (team <teamname>) (id <playerid>) +(<bodypart> (pol <distance> <angle1> <angle2>))) +(L (pol <distance> <angle1> <angle2>) (pol <distance> <angle1> <angle2>))) π.χ.: (See (G2R (pol 17.55-3.33 4.31)) (G1R (pol 17.52 3.27 4.07)) (F1R (pol 18.52 18.94 1.54)) (F2R (pol 18.52-18.91 1.52)) (B (pol 8.51-0.21-0.17)) (P (team teamred) (id 1) (head (pol 16.98-0.21 3.19)) (rlowerarm (pol 16.83-0.06 2.80)) (llowerarm (pol 16.86-0.36 3.10)) (rfoot (pol 17.00 0.29 1.68)) (lfoot (pol 16.95-0.51 1.32))) (P (team teamblue) (id 3) (rlowerarm (pol 0.18-33.55-20.16)) (llowerarm (pol 0.18 34.29-19.80)))) (L (pol 12.11-40.77-2.40) (pol 12.95-37.76-2.41)) (L (pol 12.97-37.56-2.24) (pol 13.32-32.98-2.20))
Και στις τρεις τιμές που μας επιστρέφονται προστίθεται κανονικός θορυβος.συγκεκριμενα στην απόσταση προστίθεται Ν(0, 0.0965) στην οριζόντια γωνία προστίθεται Ν(0, 0.1225) και στην κάθετη γωνία Ν(0, 0.148 ).Επίσης η διασπορά στον θόρυβο της απόστασης πολλαπλασιάζεται επί την αποσταση/100. Υλοποίηση Localization Αρχικά θα πρέπει να επεξεργαστούμε το μήνυμα ώστε να το φέρουμε σε μια πιο εύχρηστη μορφη.δηλαδη διαβάζουμε το String του μηνύματος «πετάμε» όλες της παρενθέσεις και τα κενά και περνάμε λέξη λέξη όλα το μήνυμα σε μια λιστα.στην συνεχεία αποθηκεύουμε τις τιμές σε κατάλληλες δομές για όλους του αισθητηρες.συγκεκριμενα το όνομα και οι τιμές των αρθρώσεων αποθηκεύονται σε λίστα ώστε να χρησιμοποιηθούν από το κομμάτι του Motion.Ακόμα γίνετε διαχωρισμός των ορατών(από το vision preceptor) αντικειμένων σε landmarks και αλλά αντικείμενα και αποθηκεύονται σε ξεχωριστές λιστες.αυτες οι δομές μας βοήθησαν να υλοποιήσουμε το Localization με την δημιουργία συναρτήσεων. Η υλοποίηση του Localization έγινε με την χρήση τριών συναρτήσεων. Trilateration. Μέσω της Trilateration υπολογίζεται η θέση του πράκτορα υπό την μορφή συντεταγμένων. Η συνάρτηση παίρνει ως ορίσματα δυο landmarks των οποίων οι συντεταγμένες είναι γνώστες, καθώς και τις αποστάσεις του πράκτορα από αυτά τα landmarks.συγκεκριμένα δίνοντας την απόσταση από ένα σημείο χαράζετε ένας κύκλος πάνω στον όποιο υπάρχει πιθανότητα να βρίσκετε ο πρακτορας.αντιστοιχα και με το δευτερο.αυτοι οι δυο κύκλοι τέμνονται σε πολύ δυο σημεία τα όποια είναι πιθανά να βρίσκετε ο πρακτορας.ετσι λύνοντας ένα σύστημα δυο
εξισώσεων κύκλου παίρνουμε αυτά τα δυο σημεια.επειδη τα landmarks βρίσκονται στην άκρη του γηπέδου το ένα σημείο πέφτει παντός εκτός αυτού. Καλούμε την triletaration για κάθε πιθανό συνδυασμό από δυο landmarks από αυτά που βλεπουμε.ετσι για παράδειγμα αν ο πράκτορας βλέπει 5 landmarks μας επιστρέφει 10 ζευγάρια συντεταγμένων. Βγάζοντας μέσο ορό από αυτές τις τιμές κρατάμε την τελική πεποίθηση για την θέση μας. Μέσω της συνάρτησης και τον μέσο ορό παίρνουμε αρκετά μεγάλη ακρίβεια. Συγκεκριμένα μετά το τρίτο δεκαδικό ψηφίο εμφανίζετε λαθος.δηλαδη τις τάξης των cm πάνω στο γήπεδο. Find_angle Μέσω της Find_angle βρίσκουμε την γωνία υπό την όποια είναι στραμμένη το κεφάλι στον γηπεδο.γνωριζοντας την θέση μας και δίνοντας σαν όρισμα την απόσταση το όνομα και την γωνία (οπτικού κέντρου-οριζόντια γωνία θέασης) ενός landmark μας επιστρέφει την ζητούμενη γωνια.καλουμε την συνάρτηση για κάθε ορατό Landmark και βγάζουμε μέσο ορό ώστε να αποκτήσουμε την τελική τιμη.με αυτή την συνάρτηση παίρνουμε ακρίβεια περίπου μισής μοιρας.πλεον γνωρίζοντας την γωνία του κεφαλιού σε σχέση με το γήπεδο μπορούμε εύκολα διαβάζοντας την τιμή της άρθρωσης του λαιμού να υπολογίσουμε την γωνία υπό την όποια είναι στραμμένο το σώμα μας σε σχέση με το γηπεδο.η ακρίβεια είναι ίδιας τάξεως με την προηγούμενη.
Find_object_det Με αυτή την τρίτη και τελευταία συνάρτηση υπολογίζουμε την θέση υπό την μορφή συντεταγμένων οποιοδήποτε άλλου ορατού αντικειμενου.τετοια αντικείμενα είναι η μπάλα καθώς και οι υπόλοιποι πράκτορες. Βάζοντας σαν όρισμα τα προηγούμενα δεδομένα που υπολογίσαμε πριν καθώς και την απόσταση και την γωνία από το αντικείμενο μας επιστρέφονται οι συντεταγμένες του αντικείμενου.
Αποτελέσματα και βελτιώσεις Οι παραπάνω υπολογισμοί γίνονται κάθε τρεις κύκλους δηλαδή ανά 60 ms.αν κάποια στιγμή πάρουμε κάποιον λάθος υπολογισμό δηλαδή η επομένη τιμή έχει πολύ μεγάλη διάφορα από την προηγούμενη τότε αυτός ο υπολογισμός απορρίπτεται και ο πράκτορας κρατεί την προηγούμενη πεποίθηση για το περιβάλλον. Παρόλο την φαινομενικά απλή υλοποίηση του localization συνολικά για την επεξεργασία του μηνύματος που δεχόμαστε από τον server και την υπολογισμό των στόχων που αναφέραμε στην αρχή, χρειάστηκαν 1310 γραμμές κώδικα. Παρόλα αυτά μετείχαμε καλή ακρίβεια και σχετικά γρήγορους αλγορίθμους. Βελτιώσεις: 1. Ίσως χρειαστεί η υλοποίηση κάποιου στοχαστικού μοντέλου ώστε οι πεποιθήσεις κάθε στιγμή να μην είναι ανεξάρτητες από της προηγούμενες. 2. Η χρήση μέσου όρου όταν έχουμε πολλά αποτελέσματα ίσως δεν είναι η καλύτερη λύση ειδικά όταν χρησιμοποιούμε της μετρήσεις απόστασης που περιέχουν δυναμικό θόρυβο όποιος εξαρτάται από αυτή. Ίσως
γίνεται αν υλοποιηθεί ένας αλγόριθμος που εξάπτει δυναμικά τον θόρυβο. 3. Οι συναρτήσεις find_angle, find_object_det χρησιμοποιούν τα αποτελέσματα της triletaration όποτε το λάθος λόγο θορύβου μεταφέρετε και αυξάνετε στις άλλες συναρτησεις.θα μπορούσαν να υλοποιηθούν διαφορετικά ώστε να μην χρησιμοποιούν της μετρήσεις αυτές. Ακολούθουν screenshots με διάφορα αποτελέσματα: Η πραγματική θεση του πράκτορα φαίνεται στις τιμές των μεταβλητών beamx,beamy (συντεταγμένες) και στο beamtheta που είναι η γωνιά σώματος.