Δευτέρα 24 Νοεμβρίου 2014

Εκτύπωση και επίλυση του λαβύρινθου του Neil Rosenberg με το ρομπότ S2 της Parallax

Σε αυτό το άρθρο θα δούμε το ρομπότ S2 της Parallax να κινείται σε ένα λαβύρινθο του Neil Rosenberg που βρίσκεται δημοσιευμένος στο εκπαιδευτικό υλικό:“Robots for Beginners” , που είναι δημοσιευμένο στο site της Parallax Ο λαβύρινθος  περιέχει συνδυασμό κυκλικών και ευθύγραμμων διαδρομών σε μία πίστα 2.5μ Χ 1,67 μ.

                                       
Πρώτα πρέπει να εκτυπώσουμε το λαβύρινθο , να κατασκευάσουμε την πίστα και μετά να προγραμματίσουμε το ρομπότ.

Κατασκευή της πίστας: 
Τι θα χρειαστούμε:
1)    το αρχείο S2_maze_printable.jpg που είναι η ακόλουθη εικόνα:

2)    Έναν εκτυπωτή που να μπορεί να τυπώνει σε χαρτί Α3 (προσωπικά χρησιμοποίησα ένα hp deskjet 9300)
3)    Τριάντα (30) κόλλες λευκό χαρτί Α3
4)   Διαφανές αυτοκόλλητο (από αυτό που ντύνουμε βιβλία (περίπου 4 ρολά)
5)    ψαλίδι  και σελοτέιπ
Ανοίξτε το αρχείο S2_maze_printable.jpg  με το πρόγραμμα ζωγραφικής των windows και στη διαμόρφωση σελίδας κάντε τις ρυθμίσεις που φαίνονται στην παραπάνω οθόνη και μετά εκτυπώστε.
Η πίστα θα βγει σαν ένα παζλ από 30 εικόνες (8 από τις οποίες θα είναι εντελώς λευκές.
Ενώστε τα 30 φύλλα  σύμφωνα με την παρακάτω εικόνα. Η πίστα που θα προκύψει θα έχει διαστάσεις (2.5m x 1.67m).
Δείτε την ακόλουθη εικόνα με τα κομμάτια του puzle και τις ρυθμίσεις εκτύπωσης:
Αν τελικά κατασκευάσετε την πίστα ενώνοντας τα επιμέρους τμήματα από το χαρτί Α3 θα είναι κάπως έτσι:



 Προγραμματισμός του S2 οδηγίες-υποδείξεις:

To ρομπότ πρέπει να ξεκινήσει από την αρχή (σημείο start)   και να φτάσει στο τέλος (End), περνώντας διαδοχικά από τα σημεία A,B,C,D,F,E,G,H,I,K.   Κάθε φορά που το ρομπότ φτάνει σε ένα επιθυμητό σημείο πρέπει να κάνει ένα σύντομο ήχο.
Ο μαρκαδόρος του ρομπότ πρέπει να γράφει πάντα ανάμεσα στις μαύρες γραμμές χωρίς να ξεφεύγει έξω από το μονοπάτι.
Δίνονται οι διαστάσεις:
ΔΙΑΣΤΑΣΕΙΣ
ΥΠΟΔΕΙΞΕΙΣ
Start- A=18.2cm
AB= τόξο  κύκλου (Δείτε υπόδειξη2)
BC=34.6 cm
CD=57cm
DE=78.4cm
EF=33.8cm
EG=60.2cm
GH=81.3cm
IK=109.4cm
ΗΙ= τόξο  κύκλου (Δείτε υπόδειξη3)
K-END=54cm
Υπόδειξη1: υπενθυμίζουμε ότι με ταχύτητα 100 στους 2 τροχούς και χρόνο 3 sec το ρομπότ διατρέχει 35,5 cm.
 Υπόδειξη2: Αριστερός τροχός=100 Δεξιός=40-70. Βρείτε το σωστό χρόνο! Ίσως χρειαστούν 2 τόξα και 2 εντολές.
Υπόδειξη3: αριστερός τροχός ακίνητος. Βρείτε ταχύτητα δεξιού τροχού και χρόνο.
Υπόδειξη4: Για στροφές 90ο δεξιά ή αριστερά:
Ταχύτητα αριστερού τροχού=+-100, Ταχύτητα  δεξιού τροχού=-+100    και  Χρόνος=1sec.


Οι ταχύτητες των κινητήρων του ρομπότ καθώς και οι χρόνοι κίνησης για κάθε τμήμα της πίστας δίνονται στον ακόλουθο πίνακα: 

Χρησιμοποιώντας το περιβάλλον GUI  προγραμματισμού του ρομπότ και συγκεκριμένα το πλακίδιο κίνησης εισάγουμε τις παρακάνω τιμές του πίνακα για κάθε ένα τμήμα της πίστας











Κυριακή 16 Φεβρουαρίου 2014

Κανονικά πολύγωνα και ρομποτική

Σε αυτή την ενότητα θα δούμε πώς μπορούμε να κάνουμε κανονικές πολυγωνικές αλλά και κυκλικές τροχιές με ένα ρομπότ δεξιού και αριστερού τροχού (deferential robot). Θα δούμε εξετάσουμε παραδείγματα κανονικών πολυγώνων και κύκλου, με τη βοήθεια των μαθηματικών και μετά θα παρουσιάσουμε αλγόριθμους προγραμματισμού οι οποίοι θα μπορούν να εφαρμοστούν στο ρομπότ S2 της Parallax αλλά και σε διάφορα άλλα ρομπότ (όπως το ActivityBot ή το Lego NXT). Πριν κάνουμε όμως αυτό είναι απαραίτητο να έχουμε μελετήσει και αναλύσει το πρόβλημα της επιτόπιας στροφής του ρομπότ. Πρέπει να μπορούμε να προγραμματίζουμε το ρομπότ να κάνει επιτόπιες περιστροφές ώστε να στρίβει (δεξιόστροφα ή αριστερόστροφα) διάφορες γωνίες .
Επιτόπια στροφή τουS2 κατά ω μοίρες

Πριν προχωρήσουμε στην υλοποίηση πολυγωνικών και κυκλικών τροχιών με το S2  πρέπει να μελετήσουμε την επιτόπια στροφή του τ για ζητούμενη γωνία.

Για να κάνει μία στροφή με το S2 χρησιμοποιώντας το GUI  οι ταχύτητες του δεξιού και αριστερού τροχού πρέπει να είναι αντιθέτου πρόσημου. Ειδικότερα αν οι ταχύτητες αυτές είναι ακριβώς αντίθετες το ρομπότ πραγματοποιεί μία επιτόπια στροφή  (με κέντρο περιστροφής την τρύπα του μαρκαδόρου) και έστω  Degrees  η γωνία αυτή σε μοίρες. Αν ονομάσουμε αυτήν την ταχύτητα Spd και Time το χρόνο εκτέλεσής της σε ms . Η σχέση που συνδέει την ταχύτητα Spd επί το χρόνο Time και την πραγματοποιηθείσα γωνία Degrees είναι:

Spd * Time = Degrees * 1111.1111

Για παράδειγμα για να στρίψει  90 μοίρες, Spd * Time = 90 * 1111.1111 = 100000

Θέτοντας Spd ίσον με 100 και  Time ίσο με 1 sec (1000 ms) θα πραγματοποιήσω την στροφή 90 μοιρών  μπορώ όμως να κάνω το ίδιο

Θέτοντας Spd ίσον με 50 και  Time ίσο με 2 sec (2000 ms) .

Φυσικά δεν δουλεύουν τόσο ωραία όλες οι γωνίες δεδομένου του βήματος αύξησης του χρόνου.

Ακολουθεί ένας πίνακας με τις σημαντικότερες γωνίες για τροχιές κανονικών πολυγώνων με το ρομπότ S2 της Parallax



 
Κάνοντας τροχιές με ρομπότ σε κανονικά πολύγωνα
 
Πολύγωνο λέγεται ένα  κλειστό σχήμα που έχει N κορυφές και άρα Ν πλευρές (Ν .  Ειδικότερα κανονικό πολύγωνο είναι το πολύγωνο που έχει όλες τις πλευρές του ίσες.

Έτσι μερικές κατηγορίες κανονικών Ν-γώνων για παράδειγμα είναι:

Το ισόπλευρο τρίγωνο (Ν=3), το τετράγωνο (Ν=4), το κανονικό πεντάγωνο (Ν=5), το κανονικό εξάγωνο (Ν=6) κ.τ.λ.

Ένα ειδικό ενδιαφέρον για το πρόβλημα των ρομποτικών τροχιών παρουσιάζουν τα κανονικά  Ν-γωνα με (Ν   γιατί αυτά πρακτικά προσεγγίζουν τον κύκλο. Αν  και δεν είναι πραγματικοί κύκλοι στη πράξη αυτά τα πολύγωνα μπορούν να αναπαραστήσουν ένα κύκλο με πάρα πολύ μεγάλη ακρίβεια.

Θα προσπαθήσουμε τώρα να κάνουμε τροχιές κανονικών πολυγώνων με ένα ρομπότ.

Προκειμένου ένα ρομπότ να κινηθεί  σε μία τροχιά πάνω σε κανονικό πολύγωνο πρέπει να γνωρίζει την εξωτερική γωνία του πολυγώνου ώστε να στρίψει κατάλληλα. Η γωνία αυτή για οποιοδήποτε κανονικό Ν-γωνο (Ν   είναι:  



Έτσι προκειμένου το ρομπότ να κάνει μία τροχιά σε κανονικό τρίγωνο πλευράς S (σύμφωνα με τους δείκτες του ρολογιού) πρέπει να του δώσουμε τις παρακάτω εντολές :

 
·         Προχώρησε μπροστά S
·         Στρίψε δεξιά 120ο
·         Προχώρησε μπροστά S
·         Στρίψε δεξιά 120ο
·         Προχώρησε μπροστά S
·         Στρίψει δεξιά 120ο
Ή χρησιμοποιώντας μία δομή επανάληψης:
 
·         Επανέλαβε 3 φορές
·         Προχώρησε μπροστά S
·         Στρίψε δεξιά 120ο
 

 


 Εφαρμόζοντας τον παραπάνω αλγόριθμο στο ρομπότ S2 και προγραμματίζοντας μέσα από το GUI έχουμε:



Αν θέλουμε  το ρομπότ να κάνει μία τροχιά σε κανονικό τετράγωνο πλευράς S (σύμφωνα με τους δείκτες του ρολογιού) πρέπει να του δώσουμε τις παρακάτω εντολές :

 
·         Προχώρησε μπροστά S
·         Στρίψε δεξιά 90ο
·         Προχώρησε μπροστά S
·         Στρίψε δεξιά 90ο
·         Προχώρησε μπροστά S
·         Στρίψει δεξιά 90ο
·         Προχώρησε μπροστά S
·         Στρίψει δεξιά 90ο
Ή χρησιμοποιώντας μία δομή επανάληψης:
 
·         Επανέλαβε 4 φορές
·         Προχώρησε μπροστά S
·         Στρίψε δεξιά 90ο
 



Εφαρμόζοντας τον παραπάνω αλγόριθμο στο ρομπότ S2 και προγραμματίζοντας μέσα από το GUI έχουμε:



Αν θέλουμε  το ρομπότ να κάνει μία τροχιά σε κανονικό πεντάγωνο πλευράς S (σύμφωνα με τους δείκτες του ρολογιού) πρέπει να του δώσουμε τις παρακάτω εντολές :

·         Προχώρησε μπροστά S
·         Στρίψε δεξιά 72ο
·         Προχώρησε μπροστά S
·         Στρίψε δεξιά 72ο
·         Προχώρησε μπροστά S
·         Στρίψει δεξιά 72ο
·         Προχώρησε μπροστά S
·         Στρίψει δεξιά 72ο
Ή χρησιμοποιώντας μία δομή επανάληψης:
 
·         Επανέλαβε 5 φορές
·         Προχώρησε μπροστά S
·         Στρίψε δεξιά 72ο  
 



 
Εφαρμόζοντας τον παραπάνω αλγόριθμο στο ρομπότ S2 και προγραμματίζοντας μέσα από το GUI έχουμε:

Γενικεύοντας λοιπόν αν θέλουμε  το ρομπότ να κάνει μία τροχιά σε κανονικό Ν-γωνο,    πλευράς S (σύμφωνα με τους δείκτες του ρολογιού) πρέπει να του δώσουμε τις παρακάτω εντολές :
·         Προχώρησε μπροστά S
·         Στρίψε δεξιά 360ο
·         ………………….
·           ……………… (Ν –φορές)
·         …………………
·         Προχώρησε μπροστά S
·         Στρίψει δεξιά 360ο
Ή χρησιμοποιώντας μία δομή επανάληψης:
 
·         Επανέλαβε Ν φορές
·         Προχώρησε μπροστά S
·         Στρίψε δεξιά 360ο   
 
 

Προσεγγίζοντας τον κύκλο σαν κανονικό πολύγωνο

Ξεχωριστό ενδιαφέρον παρουσιάζει ο κύκλος τον οποίο μπορούμε να προσεγγίσουμε με αρκετά καλή ακρίβεια κάνοντας ένα κανονικό 36-γωνο. Ουσιαστικά κάθε κανονικό Ν-γωνο με (Ν  προσεγγίζει  τον κύκλο και όσο μεγαλύτερο είναι το Ν τόσο ποιο καλή είναι αυτή η προσέγγιση.

 

Έτσι προκειμένου το ρομπότ να κάνει μία τροχιά σε Κύκλο με προσέγγιση κανονικού 36-γώνου πλευράς S (σύμφωνα με τους δείκτες του ρολογιού) πρέπει να του δώσουμε τις παρακάτω εντολές :

 
·         Προχώρησε μπροστά S
·         Στρίψε δεξιά 10ο
·         ………………….
·           ……………… (36 –φορές)
·         …………………
·         Προχώρησε μπροστά S
·         Στρίψει δεξιά 10ο
Ή χρησιμοποιώντας μία δομή επανάληψης:
 
·         Επανέλαβε 36 φορές
·         Προχώρησε μπροστά S
·         Στρίψε δεξιά 10ο
 

 



Εφαρμόζοντας τον παραπάνω αλγόριθμο στο ρομπότ S2 και προγραμματίζοντας μέσα από το GUI έχουμε: