Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Robotics_MarsRover

πρότζεκτ Ρομποτικής, Mars Rover Challenge

80%+ Χαρτογράφηση (mapping) & 50%+ Πιστότητα Χάρτη (fidelity)

συμβατό με python 3 και προσομοιωτή Unity

rover_image

Μετασχηματισμός Προοπτικής

Στην πρώτη συνάρτηση perspect_transform(), μετατρέπουμε την όψη της εικόνας που φαίνεται από την κάμερα του rover σε κάτοψη, δηλαδή όπως φαίνεται από πάνω. Στην εικόνα grid_img, κάθε τετράγωνο στο πλέγμα έχει μέγεθος 10x10 pixel. Δημιουργούμε μια μεταβλητή dst_size όπου την ορίζουμε ως την απόσταση από την γωνία ως το κέντρο του τετραγώνου (=10/2=5 μονάδες) και μια μεταβλητή bottom_offset που ορίζεται ως την απόσταση της κάμερας από το τετράγωνο της εικόνας (=6 μονάδες). Η επιλογή των σημείων προέλευσης έγινε μέσω του διαδραστικού παραθύρου matplotlib. Επιλέγουμε να φτιάξουμε το τετράγωνο προορισμού στο κέντρο της εικόνας, δηλαδή το μέσο της κάτω πλευράς του τετραγώνου θα είναι στο κέντρο της εικόνας και 6 μονάδες (bottom_offset) πάνω. Το image.shape[0] ισούται με 160 μονάδες, δηλαδή με το μήκος του άξονα y και το image.shape[1] ισούται με 320 μονάδες, δηλαδή με το μήκος του άξονα x. Ο άξονας y είναι αντίστροφος, συνεπώς το έδαφος έχει y=160. Έτσι για παράδειγμα, η κάτω αριστερά γωνία έχει συντεταγμένες προέλευσης (14,140) και συντεταγμένες προορισμού x=image.shape[1]/2 (=160) – dst_size = 155 , y=image.shape[0] (=160) – bottom_offset = 154. Τέλος, δημιουργούμε την μεταβλητή warped όπου ορίζεται ως η κάτοψη της εικόνας grid_img και την rock_warped που είναι η κάτοψη της εικόνας rock_img.

example_grid2 example_grid1

Κατώφλι Χρώματος

Στο επόμενο βήμα, χρησιμοποιούμε 3 συναρτήσεις για να εντοπίσουμε το πλοηγήσιμο έδαφος, τα εμπόδια και τις πέτρες. Στο διαδραστικό παράθυρο matplotlib μπορούμε να δούμε ότι το κατώφλι για το έδαφος και τα εμπόδια στα κανάλια RGB είναι (160,160,160) Έτσι, στην συνάρτηση ground_thresh όταν κάποιο pixel έχει τιμή μεγαλύτερη από 160 σε κάθε κανάλι RGB, τότε γίνεται λευκό, ενώ στην συνάρτηση obstacle_thresh όταν κάποιο pixel έχει τιμή μικρότερη από 160 σε κάθε κανάλι RGB, τότε γίνεται λευκό. Στην συνάρτηση rock_thresh, μετατρέπουμε την εικόνα rock_img όπου φαίνεται η πετρά από RGB σε HSV καθώς έτσι είναι πιο εύκολο να εντοπιστεί το κατώφλι για την πέτρα. Συνεπώς όταν κάποιο pixel είναι ανάμεσα στις τιμές 0-179 στο κανάλι H(Hue), 200-255 στο κανάλι S(Saturation) και 100-255 στο V(Value), γίνεται λευκό. Τέλος, εκτελούνται οι συναρτήσεις ground_thresh και obstacle_thresh που παίρνουν σαν όρισμα την εικόνα warped (την κάτοψη της grid_img) και οι κατωφλιοποιημένες εικόνες αποδίδονται στις μεταβλητές ground_select και obstacle select. Ομοίως εκτελείται και η rock_thresh που παίρνει σαν όρισμα την warped_rock και αποδίδεται στην μεταβλητή rock_select.

example_rock2 example_rock1

Μετασχηματισμός Συντεταγμένων

Στο συγκεκριμένο βήμα, πρέπει να μετατρέψουμε τις συντεταγμένες που έχουμε στις εικόνες κάτοψης, σε ρομποκεντρικές συντεταγμένες. Αυτό πραγματοποιείται με την συνάρτηση rover_coords όπου δημιουργείται ένα πλαίσιο συντεταγμένων που το rover βρίσκεται στο (x, y) = ( 0, 0). Έπειτα μετατρέπουμε τις ρομποκεντρικες συντεταγμένες, από καρτεσιανές σε πολικές και εφαρμόζουμε μια περιστροφή ακολουθούμενη από μια μετατόπιση. Δηλαδή, περιστρέφουμε τις ρομποκεντρικές συντεταγμένες έτσι ώστε οι άξονες x και y να είναι παράλληλοι με τους άξονες στον χώρο και μετατοπίζουμε τις περιστρεφόμενες θέσεις με τις τιμές θέσης x και y που δίνονται από την τοποθεσία του rover (διάνυσμα θέσης) στον κόσμο. Στην συνάρτηση pix_to_world , εκτελείται η περιστροφή και η μετατόπιση και τέλος η κλιμάκωση της τάξης του 10, αφού όπως αναφέρεται κάθε pixel στον χάρτη του περιβάλλοντος θέλουμε να είναι 1 τετραγωνικό μέτρο , ενώ μέχρι τώρα κάθε pixel απεικόνιζε 0.1 x 0.1 m.

map_bw

Συνάρτηση process_image

Στο βήμα αυτό καλούμε τις συναρτήσεις που ορίσαμε προηγουμένως για να δημιουργήσουμε ένα βίντεο. Αφού έχουμε υπολογίσει τις συντεταγμένες περιβάλλοντος όπως περιγράψαμε στα προηγούμενα βήματα, πραγματοποιούμε ενημέρωση του χάρτη του κόσμου όπου στο πρώτο κανάλι (red) θα φαίνονται τα εμπόδια με κόκκινο, στο δεύτερο (green) θα φαίνονται οι πέτρες με πράσινο και τέλος στο τρίτο κανάλι (blue) θα φαίνεται το πλοηγήσιμο έδαφος με μπλε.

test_mapping.mp4

Αυτόνομη Πλοήγηση και Χαρτογράφηση

Τα αρχεία Python σε αυτό το αποθετήριο επιτρέπουν στο rover να χαρτογραφήσει πλήρως αυτόνομα το περιβάλλον και να συλλέξει όλα τα δείγματα πετρωμάτων πριν επιστρέψει στην αρχική θέση. Οι δύο κύριες λειτουργίες είναι perception.py και decision.py.

Το perception.py αρχείο περιλαμβάνει όλο τον κώδικα που χρησιμοποιείται για να προσδιορίσει πού βρίσκεται το rover και τι βρίσκεται γύρω του. Το decision.py αρχείο περιλαμβάνει όλο τον κώδικα που χρησιμοποιείται από το rover για τη λήψη αποφάσεων. Παίρνει τα δεδομένα του αισθητήρα perception.py και προσπαθεί να προσδιορίσει ποιες ενέργειες πρέπει να κάνει.

About

πρότζεκτ Ρομποτικής, Mars Rover

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors