Αυτόνομοι πράκτορεσ Αναφορά εργαςίασ εξαμινου Ρομπότ πυροςβζςτθσ Όνομα : Αντρζασ Κουκκουλλισ Α.Μ : 2008030086 Χειμερινό Εξάμθνο 2012-2013
κοπόσ τθσ εργαςίασ εξαμινου είναι να δθμιουργθκεί ζνα ρομπότ ςτον προςομοιωτι webots που να λφνει το πρόβλθμα τθσ ςχεδίαςθσ βζλτιςτθσ διαδρομισ path planning και του localization. Ο προςομοιωτισ δίνει τθν δυνατότθτα να ςχεδιάςεισ ζνα κόςμο με όλα τα προβλιματα που μπορεί να ζχει κακϊσ και ρομποτικοφσ πράκτορεσ που μποροφν να αλλθλεπιδράςουν με τον κόςμο και τα αντικείμενα που βρίςκονται ςε αυτόν. Η ςυμπεριφορά του πράκτορα μπορεί να προγραμματιςτεί ςε πολλζσ γλϊςςεσ ςυμπεριλαμβανομζνων των JAVA, C++, C, MatLab. τθν δικι μου εργαςία προτίμθςα τθν γλϊςςα C. Για να παρουςιάςω το πρόβλθμα, παρομοίαςα το πρόβλθμα με ζνα γνωςτό πρόβλθμα που μπορεί να αντιμετωπίςει ζνασ πυροςβζςτθσ. Σθν προςπάκεια να διαςϊςει τα κφματα από ζνα φλεγόμενο ςπίτι ακολουκϊντασ μια διαδρομι που κα είναι γριγορθ και δεν κα αφιςει κανζνα κφμα πίςω. Πάντα ζνα ςπίτι αποτελείτε από πολλά δωμάτια, ζχει μια είςοδο και ο πυροςβζςτθσ πρζπει να επιςκεφτεί όλα τα δωμάτια για να βεβαιωκεί πωσ δεν ζχει μείνει κανζνασ πίςω ι να ςταματιςει μόλισ βεβαιωκεί ότι όλα τα κφματα είναι ζξω. χεδιαςμόσ του κόςμου Η προςομοίωςθ αποτελείτε από ζνα κόςμο ενόσ ςπιτιοφ με 6 διακριτοφσ χϊρουσ και μια ζξοδο. Μζςα ςτο κόςμο υπάρχουν πράςινεσ μπάλεσ που το ρομπότ πρζπει να μεταφζρει ςτθν είςοδο του ςπιτιοφ. Χαρακτηριςτικά του Πράκτορα Σο ρομπότ ζχει ςχεδιαςτεί από τθν αρχι, δεν ζχει χρθςιμοποιθκεί κάποιο ζτοιμο ρομπότ. Αποτελείτε από ζνα ςετ τροχϊν που επιτρζπουν τθν κίνθςθ μζςα ςτο χϊρο και ζνα ςετ «χεριϊν» που μζςα ςε αυτά κα κρατά τθν μπάλα για να τθν βγάλει ζξω. Σο ρομπότ διακζτει πλθκϊρα αιςκθτιρων που τον βοθκοφν να αντιλαμβάνεται ποφ είναι και πϊσ κα πρζπει να αντιδράςει. Αρχικά ζχει τοποκετθκεί μια κάμερα ςτο μπροςτά μζροσ του ρομπότ με τθν οποία βλζπει τον χϊρο. Όταν το ρομπότ δει μια μπάλα τότε ακολουκεί πορεία προσ αυτι. Έχουν τοποκετθκεί δφο δζκτεσ GPS για να μπορεί ο πράκτορασ να ξζρει που βρίςκετε ςε κάκε ςτιγμι. Αρκεί να ξζρει ςε ποια διακριτι περιοχι βρίςκετε και όχι με απόλυτθ ακρίβεια ςε πιο ςθμείο του χάρτθ βρίςκετε, και αυτό γίνετε για να αποφφγουμε όςο το δυνατό τισ λανκαςμζνεσ αποφάςεισ λόγο κορφβου ι λάκοσ μετακίνθςθσ του ρομπότ από λάκοσ κίνθςθ των τροχϊν. Επίςθσ με τθν βοικεια και του δεφτερου δζκτθ μπορεί να ξζρει προσ τα ποφ βλζπει, κάτι που είναι ςθμαντικό για τον ςχεδιαςμό τθσ βζλτιςτθσ διαδρομισ.
Σο ρομπότ διακζτει δφο υπερφκρουσ αιςκθτιρεσ μπροςτά για να μπορεί να υπολογίηει τθν απόςταςθ από τουσ τοίχουσ δεξιά και αριςτερά του, για να αποφεφγει τισ ςυγκροφςεισ. Έχει τοποκετθκεί ςτο μπροςτά μζροσ του ρομπότ ςτο φψοσ του πατϊματοσ ζνασ αιςκθτιρασ αφισ ο οποίοσ ενεργοποιείτε αν ζρκει ςε επαφι με κάποιο άλλο ςτερεό. Χρθςιμοποιείτε για να αντιλαμβάνεται ο πράκτορασ πότε ζχει πιάςει τθν μπάλα για να μπορζςει να τθν μεταφζρει προσ τθν ζξοδο. Σζλοσ το ρομπότ διακζτει δφο ςερβοκινθτιρεσ ςτα άκρα των χεριϊν του οι οποίοι δθμιουργοφν ζνα είδοσ δαγκάνασ και κλείνουν όταν ενεργοποιθκεί ο αιςκθτιρασ αφισ οφτωσ ϊςτε να μθν μπορεί θ μπάλα να διαφφγει από το ρομπότ ςτθν προςπάκεια του να τθν μεταφζρει ςτθν ζξοδο. IR distance sensor GPS camera servo Touch sensor
Λειτουργίεσ κίνηςησ του Ρομπότ Σο ρομπότ μπορεί να προχωριςει μπροςτά, πίςω δεξιά, αριςτερά, επί τόπου δεξιά, επί τόπου αριςτερά και να ςταματιςει. Διαδικαςία Διάςωςησ. Αρχικά το ρομπότ ξεκινά από τθν είςοδο του χάρτθ με τισ δαγκάνεσ του ανοικτζσ και ξεκινά ο αλγόρικμοσ αναηιτθςθσ τθσ μπάλασ. Προςπακεί να εξερευνιςει όλεσ τισ περιοχζσ του κόςμου ςτθν προςπάκεια του να εντοπίςει τισ μπάλεσ / κφματα. Ακολουκεί τθν μζκοδο Left/Right Wall follow ανάλογα με τθν περιοχι που βρίςκετε. Οι αιςκθτιρεσ αφισ του επιτρζπουν να αναγνωρίηει αν βρίςκετε πολφ κοντά ι πολφ μακριά από τον τοίχο που ακολουκεί και να διορκϊςει τθν κζςθ του. Επίςθσ με τουσ αιςκθτιρεσ αφισ μπορεί να καταλάβει πότε βρίςκετε ςε ςτροφι και να ςτρίψει. Αν μια περιοχι είναι «κακαρι» τότε ο πράκτορασ δεν τθν επιςκζπτεται για να μθν αυξιςει το μικοσ τθσ διαδρομισ του προσ τθν μπάλα. Όταν το ρομπότ δει μια μπάλα μζςα από τθν κάμερα, κλειδϊνει ςε αυτιν και προςπακεί να ευκυγραμμιςτεί ςε αυτιν και να τθν πλθςιάςει. Μόλισ θ μπάλα αγγίξει τον αιςκθτιρα αφισ, οι δαγκάνεσ του ρομπότ κλείνουν εγκλωβίηοντασ τθν μπάλα και εμποδίηοντασ τθν να ξεφφγει. Μόλισ το ρομπότ πιάςει τθν μπάλα ενεργοποιείτε ο αλγόρικμοσ απόδραςθσ. Ανάλογα με τθν περιοχι που βρίςκετε το ρομπότ πρζπει να ςτρίψει για να ακολουκιςει ανάποδθ διαδρομι από αυτι που ιρκε, για να επιςτρζψει ςτθν είςοδο. Αυτό γίνετε ςυγκρίνοντασ τισ τιμζσ των δφο GPS. Όταν βρίςκετε ςε ςταυροδρόμι ξζρει τθν κζςθ του και επιλζγει τθν ςτροφι που κα τον οδθγιςει ςτθν ζξοδο και όχι κάποια άλλθ μεγαλφτερθ διαδρομι. Για τθν πορεία προσ τθν ζξοδο χρθςιμοποιεί πάλι τθν μζκοδο Left/Right Wall follow. τθν διαδικαςία διάςωςθσ τθσ μπάλασ θ επιλογι τθσ μεκόδου επιλζγετε όχι από τθν περιοχι που βρίςκετε τθν κάκε ςτιγμι αλλά από τθν περιοχι που ζχει πάρει τθν μπάλα. ( Εκτόσ από μια περίπτωςθ πιο πολφπλοκθ που αλλάηει μζκοδο ςτθν πορεία ) Ακολουκεί ο ψευδοκϊδικασ για τθν αναηιτθςθ τθσ μπάλασ και θ διαδικαςία μεταφοράσ τθσ μπάλασ ςτθν ζξοδο και ο χάρτθσ του κόςμου. ε ψευδοκώδικα η αναζθτηση της μπάλας. If robot in area1 if robot in area 2 if area3 == clean
Else If robot in area 3 If robot in area 4 if area 5 == clean Else If robot in area 5 If robot in area 6 ε ψευδοκϊδικα η επιλογή πορείασ προσ την ζξοδο αφοφ πάρει την μπάλα Turn 180 degree If robot in area1 if robot in area 2 If robot in area 3 If robot in area 4 If robot in area 5 If robot in area 6 until you reach area 4 then
Σρόποσ Λειτουργίασ Κάμερασ και κλειδϊματοσ τησ πορείασ προσ την μπάλα Η κάμερα ζχει ανάλυςθ 80 Χ 60 pixels. Κάκε δφο timesteps παίρνει μια εικόνα. Με ζνα διπλό loop διατρζχω όλα τα pixels τθσ εικόνασ και για κάκε pixel παίρνω τθν τιμι για τα τρία βαςικά χρϊματα RED GREEN BLUE (RGB). O κόςμοσ είναι ςχεδιαςμζνοσ με τζτοιο τρόπο ϊςτε οι πράςινθ μπάλα να είναι πολφ διακριτι ςε ςχζςθ με οτιδιποτε άλλο μζςα ςε αυτόν. Αν ςτθν εικόνα ζχω πράςινα pixels (g > 200 && b <100 && r <100 ) ξζρω ότι το ρομπότ βλζπει μια μπάλα. Αν τα πράςινα pixels βρίςκονται πολφ αριςτερά ι πολφ δεξιά ςτθν εικόνα τότε ο πράκτορασ διορκϊνει τθν κζςθ του ωσ προσ τθν μπάλα. const unsigned char *image = wb_camera_get_image(camera); for ( x = 0; x < 80; x++) for ( y = 0; y < 60; y++) { int r = wb_camera_image_get_red(image, image_width, x, y); int g = wb_camera_image_get_green(image, image_width, x, y); int b = wb_camera_image_get_blue(image, image_width, x, y); //printf("red=%d, green=%d, blue=%d \n", r, g, b){ if (g > 200 && b <100 && r <100 ){ ball_visible=1; aristera if ( x < 10 ) // an I mpala einai poli dexia rotateleft(); else if (x > 70 ) // an I mpala einai poli rotateright(); else{ FindBallAlgorithm Σρόποσ λειτουργίασ touch sensor και servo Μόλισ θ μπάλα αγγίξει τον αιςκθτιρα αφισ οι ςερβοκινθτιρεσ κλεινουν. if ( touch_value == 1 ) { wb_servo_set_position(servor,1.6); wb_servo_set_position(servol,-1.6); ball_taken=1; ball_visible=0;
Σρόποσ λειτουργίασ υπζρυθρων αιςθητήρων Αν πλθςιάςει τον τοίχο τότε διορκϊνει τθν πορεία του, αν απομακρυνκεί από τον τοίχο διορκϊνει τθν πορεία του αλλιϊσ προχωρεί ευκεία. if (ir1_value < 1800 ) { // an einai konta ston tixo printf("too close to wall %lf, fix position \n",ir1_value); turnright(); else if ( ir1_value > 2000 ) { printf("too far from wall %lf, fix position \n",ir1_value); //goforward(); turnleft(); else goforward();