Γιάννης Τζώρτζης Αυτόνομο όχημα Τελική Αναφορά Η αρχική ιδέα της εργασίας ήταν η κατασκευή και ο προγραμματισμός ενός οχήματος, κλίμακας 1/12, το οποίο θα πραγματοποιούσε αυτόματο παρκάρισμα. Σύμφωνα με αυτή την ιδέα το όχημα αρχικά θα βρισκόταν παράλληλα σε κάποιου είδους τειχίο και πιο πίσω από την κενή θέση που ήταν και η τελική. Στη συνέχεια το όχημα θα προχωρούσε προς τα εμπρός και θα είχε το συνεχή έλεγχο της πλαϊνής απόστασης από το τειχίο με έναν αισθητήρα. Το όχημα λοιπόν θα έπρεπε να αναγνωρίσει το άνοιγμα να «σιγουρευτεί» ότι ο χώρος είναι αρκετά μεγάλος, και τελικά να κάνει τις ανάλογες κινήσεις ώστε να σταθμεύσει. Η παραπάνω ιδέα ήταν σχετικά απλή και ο στόχος της εργασίας απαιτούσε μια πιο αλοκληρωμένη, από την άποψη της αυτονομίας, συμπεριφορά. Έτσι λοιπόν εμφανίστηκε η νέα και τελική ιδέα της εργασίας και η οποία θα αναλυθεί παρακάτω λεπτομερώς. Σύμφωνα με αυτή την ιδέα το όχημα πρέπει να ξεκινήσει από μία αρχική θέση, με συντεταγμένες (x, y, θ), να κινηθεί μέσα σε ένα χώρο διαμορφωμένο με εμπόδια, και να φτάσει στην τελική θέση με ανάλογες συντεταγμένες. Κατασκευή του οχήματος Για την κατασκευή του οχήματος χρησιμοποιήθηκαν διάφορα υλικά τα οποία περιγράφονται και φαίνονται παρακάτω: Εικόνα 1 Εικόνα 2 Εικόνα 3 Εικόνα 4 Εικόνα 5 Εικόνα 1: Εικόνα 2: Εικόνα 3: Εικόνα 4: Εικόνα 5: Τηλεκατευθυνόμενο μοντέλο Wheely king 4x4, HPI Racing Ηλεκτρονική προγραμματιζόμενη πλατφόρμα Arduino uno Αισθητήρας απόστασης HC-SR04 Breadboard Σερβο μηχανισμός Τα παραπάνω υλικά τοποθετήθηκαν σε ένα αυτοσχέδιο πλαστικό πλαίσιο, όπου και έγιναν οι ανάλογες συνδέσεις. Το τελικό αποτέλεσμα φαίνεται παρακάτω:
Κατά τη διαδικασία της κατασκευής παρουσιάστηκαν αρκετές δυσκολίες. Αρχικά είχαν τοποθετηθεί τέσσερεις αισθητήρες πάνω στο όχημα, ένας στην κάθε γωνία, και έτσι με αυτά τα δεδομένα ξεκίνησε και ο προγραμματισμός. Παρατηρήθηκε όμως ότι οι αποστάσεις που έδιναν οι αισθητήρες ήταν λανθασμένες, και αυτό γιατί για να αναγνωρίσουν ένα εμπόδιο στη σωστή απόσταση, η επιφάνεια του τελευταίου πρέπει να είναι κάθετη στη διεύθυνση που οι αισθητήρες στέλνουν τους παλμούς. Μετά από σκέψη και αναζήτηση στο διαδίκτυο, το πρόβλημα λύθηκε με το να τοποθετηθεί ένας και μόνο αισθητήρας πάνω σε ένα σερβό-μηχανισμό, ώστε να μπορεί να στραφεί προς οποιαδήποτε κατεύθυνση. Άλλη δυσκολία που παρουσιάστηκε κατά την κατασκευή ήταν η κίνηση του οχήματος. Όπως αναφέραμε παραπάνω, το όχημα είναι ένα τηλεκατευθυνόμενο μοντέλο που κινείται με εντολές που δέχεται από το χειριστήριο. Έτσι δεν γινόταν να κινηθεί το μοτέρ χωρίς το χειριστήριο. Για να λυθεί αυτό το πρόβλημα αντί για το μοτέρ-κίνησης χρησιμοποιήθηκε ένας συνεχής σερβο-μηχανισμός. Όμως έτσι το όχημα κινούνταν πολύ αργά με αποτέλεσμα να μην μπορεί να ολοκληρωθεί ο σκοπός της εργασίας. Τελικά χρησιμοποιήθηκε ξανά το μοτέρ-κίνησης και επίσης τοποθετήθηκε πάνω στο όχημα και η ηλεκτρονική πλακέτα του χειριστηρίου. Έτσι χρειάστηκε μόνο ένας επιπλέον σέρβο-μηχανισμός που κινεί τον λεβιέ του χειριστηρίου. Σχεδιασμός Πριν να ξεκινήσει ο προγραμματισμός έπρεπε να γίνει κάποιος σχεδιασμός της λύσης, ο σχεδιασμός του προβλήματος, των κινήσεων κτλ. Αρχικά λοιπόν σχεδιάστηκε ο στατικός χάρτης που αντιπροσωπεύει τον χώρο μέσα στον οποίο κινείται το όχημα. Ο χάρτης ακολουθεί.
Όπως φαίνεται έγινε διακριτοποίηση του χώρου, για τον εύκολο χειρισμό των συντεταγμένων του οχήματος με την χρήση των δύο αξόνων x, y που φαίνονται και στο σχήμα. Επίσης έπρεπε να καθοριστούν οι κινήσεις που θα είναι σε θέση να πραγματοποιήσει το όχημα, για να χρησιμοποιηθούν και οι κατάλληλοι περιορισμοί κατά τη διαδικασία του προγραμματισμού. Για παράδειγμα αν το όχημα είναι στη θέση (1, 1, 0), όπως φαίνεται στο σχέδιο, δεν μπορεί να βρεθεί με μία κίνηση στη θέση (2, 1, 0), και αυτό γιατί κάνει τις ανάλογες κινήσεις με ένα πραγματικό αυτοκίνητο και επομένως δεν μπορεί να προχωρήσει πλάγια. Έτσι λοιπόν δημιουργήθηκαν τα ακόλουθα σχέδια που βοηθούν στην κατανόηση των κινήσεων που μπορεί να πραγματοποιήσει το όχημα. Για παράδειγμα λοιπόν, αν το όχημα βρίσκεται στη θέση με συντεταγμένες (1, 1, 0) και κινηθεί ευθεία μπροστά θα φτάσει στη νέ θέση με συντεταγμένες (1, 2, 0). Ενώ αν από την αρχική θέση επιλέξει να πάει μπροστά και δεξιά, τοτε θα βρεθεί στη θέση με συντεταγμένες (2, 2, 90).
Προγραμματισμός Ο προγραμματισμός του Arduino γίνεται κατά βάση στη γλώσσα προγραμματισμού C, χρησιμοποιώντας κάποιες επιπλέον βιβλιοθήκες, για τον χειρισμό των σερβο-μηχανισμών κα. Η φάση του προγραμματισμού ξεκίνησε με τη δημιουργία απλών και μικρών συναρτήσεων που υλοποιούν τις βασικές κινήσεις του οχήματος, τις κινήσεις και τις μετρήσεις του αισθητήρα κα. Το πιο βασικό κομμάτι στο μέρος του προγραμματισμού ήταν η υλοποίηση της αυτόνομης συμπεριφοράς του οχήματος. Για αυτό αρχικά έπρεπε να βρεθεί ένας αλγόριθμος εντοπισμού του συντομότερου μονοπατιού σε έναν χάρτη. Γι αυτό η αυτόνομη συμπεριφορά βασίστηκε στον αλγόριθμο Α*. Μετά την εύρεση του μονοπατιού, δίνονται οι αντίστοιχες εντολές στο όχημα, ώστε να κάνει τις σωστές κινήσεις για να ακολουθήσει το μονοπάτι. Επιπλέον όμως θα πρέπει το όχημα να ελέγχει αν όντως ακολουθεί το μονοπάτι στον πραγματικό κόσμο. Για να γίνει αυτό ορίστηκαν τρία σημεία, ως σημεία ελέγχου. Για παράδειγμα λοιπόν στο πρώτο σημείο το όχημα πρέπει να έχει στα δεξιά και στα αριστερά του κάποιο τειχίο σε συγκεκριμένη απόσταση. Αν όντως είναι έτσι τότε θεωρεί ότι βρίσκεται μέσα στο μονοπάτι, διαφορετικά προχωράει ευθεία μέχρι να βρει κάποιο άνοιγμα αριστερά, όπου και θα στρίψει. Για να πραγματοποιηθούν όλα τα παραπάνω δημιουργήθηκε επίσης και ένα σύνολο από συναρτήσεις που ελέγχουν, ανανεώνουν και διορθώνουν τις συντεταγμένες του οχήματος ανάλογα με τις κινήσεις που κάνει. Και στο μέρος του προγραμματισμού εμφανίστηκαν αρκετές δυσκολίες. Ο αλγόριθμος Α* δεν βρέθηκε έτοιμος στη γλώσσα C, οπότε υλοποιήθηκε από την αρχή με μερικές τροποποιήσεις βέβαια για να ταιριάζουν τα αποτελέσματα του στις κινήσεις που μπορεί να πραγματοποιήσει το όχημα. Επίσης οι τιμές που έπρεπε να υπολογιστούν για τον αλγόριθμο, είναι πολλές και όταν εφαρμόστηκε στο arduino τότε αυτό δεν τα κατάφερνε λόγω της περιορισμένης μνήμης του. Έτσι ο αλγόριθμος τρέχει στον υπολογιστή και τα αποτελέσματα περνιούνται χειροκίνητα στον κώδικα του adruino ώστε να δουλέψει σωστά. Ακολουθούν μερικά στιγμιότυπα από τα αποτελέσματα του προγράμματος εύρεσης μονοπατιού:
Προφανώς και στη συγγραφή του κώδικα που τελικά φορτώνουμε στο arduino εμφανίστηκαν αρκετές δυσκολίες που καθυστέρησαν αρκετά την ολοκλήρωση του αυτόνομου πράκτορα. Μετά από όλα τα παραπάνω το μόνο που έμεινε ήταν οι αμέτρητες δοκιμές! Τέλος Αναφοράς