Αναφορά Τελικής Εργασίας Αυτόνομοι Πράκτορες Φραγκιαδουλάκης Μανόλης Το Ναο χορεύει πεντοζάλι Σε αυτή την εργασία θα δούμε βήμα βήμα την υλοποίηση μίας χορογραφίας απο το Νάο. Ο Ναο γίνεται κρητικός και χορεύει πεντοζάλι. Για την υλοποίηση της εργασίας χρησιμοποιήθηκαν το πρόγραμμα Webots για το simulation, έτσι ώστε να έχουμε ένα περιβάλλον στο οποίο θα χορεύει το Ναο, και το Choregraphe για τα poses και το συγχρονισμό της χορογραφίας με τη μουσική. ΙΣΟΡΡΟΠΙΑ Στον συγκεκριμένο χορό το κομμάτι της ισορροπίας παίζει μεγάλη σημασία. Το Νάο πρέπει να ισορροπεί στο ένα πόδι σε όλα τα βήματα του πεντοζάλι. Αυτό όμως δεν ήταν υλοποιήσιμο, γι'αυτό το λόγο υλοποιήθηκε ένας αλγόριθμος, έτσι ώστε το Ναο να αιωρείται και να μην πέφτει κατά την διάρκεια της χορογραφίας. Για την υλοποίηση της αιώρησης στο Webots προσθέσαμε στον κόσμο μας ένα supervisor. O supervisor είχε ως controller τον κώδικα nao_soccer_supervisor.c, ο οποίος είχε υλοποιηθεί στον διαγωνισμό robotstadium. Χρησιμοποιήσαμε και τροποιήσαμε τον κώδικα ώστε να κάνει μόνο το κομμάτι της αρχικοποίησης του Nao και της αιώρησης στον κόσμο. Στην main του κώδικα τρέχει την συνάρτηση initialize(), η οποία αρχικοποιεί τον κόσμο και το Ναο. Κάνει την αρχικοποίηση του Webots με την συνάρτηση wb_robot_init(). Έπειτα παίρνει μεταβλητές για τον emitter και τον reciever του supervisor, απαραίτητες για την εκπομπή και παραλαβή δεδομένων του κόσμου αντίστοιχα. Τέλος αποθηκεύει σε έναν κομβο το robot με την συνάρτηση wb_supervisor_node_get_from_def("cretandancer"). Εκτός απο την συνάρτηση initialize() η main τρέχει και την συνάρηση hold_to_kickoff(double), η αποία έχει ένα ατέρμονο loop που τρέχει τις συνάρτησεις place_to_kickoff() και step(). Η συνάρτηση step() ανανεώνει τα pointers του robot με την συνάρτηση wb_supervisor_field_get_sf_vec3f και αλλάζει το χρόνο στο simulation.
Όσον αφορά την συνάρτηση place_to_kickoff(), χρησιμοποιεί την move_robot_2d(int, double, double, double), η οποία χρησιμοποιεί την move_robot_3d(int robot_index, double, double, double, double), για να θέσει την θέση του robot πάνω απο το δάπεδο. Με την συνάρτηση wb_supervisor_field_set_sf_vec3f(robot_index,{x,y,z}) αλλάζοντας τη μεταβλητή y του άξονα y σε 0.5 μετακινούμε το robot σε μία θέση,η οποία αντιστοιχεί πάνω από το δάπεδο. Στην παρακάτω εικόνα μπορούμε να δούμε ότι το Nao δεν πατάει στο δάπεδο : SIMULATION ΠΕΡΙΒΑΛΛΟΝ Ο κόσμος, που δημιουργήσαμε στο Webots, προσομοιώνει ένα κρητικό γλέντι. Προσθέσαμε τραπέζια, καρέκλες και μία πίστα για το Ναο, ώστε να μπορεί να χορέψει. Ο Νάο ως παραδοσιακός κρητικός χορευτής φοράει μαύρα ρούχα. Παρακάτω βλέπουμε τις εικόνες απο το Webots για το κρητικό γλέντι :
ΧΟΡΟΓΡΑΦΙΑ Το κομμάτι της χορογραφίας υλοποιήθηκε με το πρόγραμμα Choregraphe. Δημιουργήσαμε τα κατάλληλα κουτιά timeline, για να φτιάξουμε τα poses της χορογραφίας. Η χορογραφία έγινε όπως φαίνεται παρακάτω :
Στο κουτί timeline Start βάλαμε τα poses του Nαο με τέτοιο τρόπο ώστε να σηκώνει τα χέρια του σε Τ, έτσι όπως πρέπει να είναι στον πεντοζάλι, και να χτυπάει ελαφρά (αργή κίνηση, δηλαδή τα poses έχουν μεγάλη απόσταση μεταξή τους) το δεξί του πόδι κάτω πριν αρχίσει η χορογραφία. Αφού τελειώσει με το αρχικά βήματα παίζει την μουσική και κάνει τις κινήσεις του πεντοζάλι. Η μουσική που επιλέξαμε είναι οι ήχοι που κάνουν τα στιβάνια στο ξύλινο δάπεδο καθώς χορεύεις πεντοζάλι, αυτός είναι ο λεγόμενος βουβός πεντοζάλης. Οι ήχοι αυτοί διαρκούν τρεις επαναλήψεις της χορογραφίας. Το κουτί 5moves περιέχει τα 5 βήματα του πεντοζάλι. To έχουμε βάλει να κάνει επανάληψη τον κινήσεων 3 φορές, δηλαδή όσο διαρκεί και η μουσική. Για το κάθε βήμα της χορογραφίας χρησιμοποιήσαμε ξεχωριστό κουτί timeline, όπως φαίνεται στην παρακάτω εικόνα: Η μουσική και η χορογραφία καταλήγουν στο κουτί End, στο οποίο γίνεται μία υπόκλιση.
Σημείωση : Για τη σύνδεση του Webots με το Choregraphe βάλαμε ως controller το naoqisim. Βέβαια η σύνδεση δεν ήταν ούτε δυνατή ούτε αποτελεσματική. Η αρθρώσεις του Ναο μπερδευόντουσαν, γιατί ήταν στον αέρα.