Πανεπιστήμιο Αιγαίου

3rd Aegean Robotics Competition 2019

Program-A-Robot-2019




Εισαγωγη

Τα drones είναι εναέρια ρομπότ που έχουν γίνει αρκετά διάσημα τα τελευταία χρόνια. Αρχικά, δημιουργήθηκαν για στρατιωτικούς σκοπούς και με τη μείωση του κόστους τους έχουν δώσει τη δυνατότητα υλοποίησης διάφορων εμπορικών εφαρμογών που έχουν να κάνουν με την παρακολούθηση της υποδομής, την γεωργία, την επιτήρηση, την καταγραφή γεγονότων κλπ. Είναι ρομπότ που περιέχουν αισθητήρες, ενεργοποιητές και επεξεργαστές. Η ευφυΐα τους, ωστόσο, βρίσκεται στο λογισμικό τους.

Η ομάδα AegeanRobotics του εργαστηρίου Τεχνητής Νοημοσύνης και Στήριξης Αποφάσεων του Τμήματος Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων του Πανεπιστημίου Αιγαίου διοργανώνει για τρίτη συνεχή χρονιά τον πανελλήνιο διαγωνισμό εκπαιδευτικής ρομποτικής AegeanRobotics Competition 2019.

Μια από τις δοκιμασίες στις οποίες μπορείτε να δηλώσετε συμμετοχή είναι η Program-A-Robot που διοργανώνεται σε συνεργασία με το πανεπιστήμιο Rey Juan Carlos της Μαδρίτης.

Ο διαγωνισμός Program-A-Robot απευθύνεται σε φοιτητές, απόφοιτους και διδακτορικούς φοιτητές μηχανικών σχολών σε όλο τον κόσμο και στόχος του είναι να προωθήσει τη ρομποτική και την υπολογιστική όραση προσφέροντας προκλήσεις και την ευκαιρία να συγκρίνει κανείς τη λύση του με άλλους συναγωνιστές. Ξεκίνησε το 2016 ως ρομποτικός διαγωνισμός στο Πανεπιστήμιο Rey Juan Carlos (2016, Program-A-Robot). Η δεύτερη φορά (2017, Program-A-Robot) οργανώθηκε στο εσωτερικό του ισπανικού πανεπιστημίου Jornadas Nacionales de Robótica. Φέτος η τρίτη φορά έχει διεξαχθεί στα πλαίσια του Διεθνούς Συνέδριου για τα Ευφυή Ρομπότ και Συστήματα (IROS 2018). Πραγματοποιήθηκε στη Μαδρίτη τον Οκτώβριο 1-5 του 2018.

Ο διαγωνισμός προτείνει δύο δοκιμασίες στον προγραμματισμό ενός αυτόματου και έξυπνου drone. Στην πρώτη δοκιμασία, που λέγεται Cat and Mouse Challenge, το drone "γάτα" πρέπει να προγραμματιστεί για να μπορεί να αναζητήσει, να κυνηγήσει και να μένει κοντά σε ένα άλλο drone, το drone "ποντίκι". Τα drone "ποντίκια" θα ενεργοποιούνται αυτόματα. Στην δεύτερη δοκιμασία, που είναι η Escape from the Hangar Challenge, ένα drone θα πρέπει να μπορεί να μπει μέσα σε ένα υπόστεγο για αεροπλάνα και να βγει έξω αποφεύγοντας την σύγκρουση με κινούμενους τοίχους. Όλα έχουν να κάνουν με τον προγραμματισμό, με τον προγραμματισμό ρομπότ!

Οργανωση και Αξιολογηση

Χρονοδιάγραμμα
  • Όλοι οι διαγωνιζόμενοι θα πρέπει να εγγραφούν ατομικά στην πλατφόρμα JdeRobot-Academy WebIDE.
Σκορ

Για τον καθορισμό του σκορ των αλγορίθμων, έχουμε υλοποιήσει δύο αυτόματους διαιτητές οι οποίοι θα αξιολογήσουν την απόδοση του αλγορίθμου σας. Οι διαιτητές είναι διαθέσιμοι όταν ετοιμάζετε τον κώδικά σας ή στην προπόνηση, έτσι ώστε να μπορείτε να λαμβάνετε το σκορ και να βελτιώνετε τους αλγόριθμους. Για να είναι δίκαιο, όλοι οι κώδικες των συμμετεχόντων θα τρέξουν από τον ίδιο υπολογιστή της οργανωτικής επιτροπής υπό τις ίδιες συνθήκες (αρχική θέση των drones, συμπεριφορά του "ποντικιού", κίνηση των τοίχων στο υπόστεγο...).

Σκορ στο Cat and Mouse Challenge

Κάθε γύρος θα διαρκεί 2 λεπτά. Το drone "γάτα" θα αρχίζει σε διαφορετικές θέσεις, σε σχέση με το drone "ποντίκι", και πρέπει να το ψάχνει και να το κυνηγάει. Η οργανωτική επιτροπή θα έχει κάποια προγραμματισμένα "ποντίκια" απλής συμπεριφοράς και άλλα με μεγαλύτερη δυσκολία εντοπισμού. Κάποια από αυτά θα είναι διαθέσιμα για εκπαίδευση. Ο αυτόματος διαιτητής θα μετρά την τρέχουσα στιγμιαία απόσταση μεταξύ της "γάτας" και του "ποντικιού" και θα δείχνει την εξέλιξη όλου του γύρου στην οθόνη. Όταν θα είναι κάτω από ένα συγκεκριμένο όριο τόσο η γραμμή προόδου όσο και το background θα είναι πράσινα και όταν θα είναι πάνω από το όριο θα είναι κόκκινα. Όσο η "γάτα" είναι κοντά στο "ποντίκι", το σκορ θα ανεβαίνει. Απαγορεύεται η "γάτα" να ακουμπήσει το "ποντίκι". Κάθε επαφή θα τιμωρείται στο σκορ.

Σκορ στο Escape from the Hangar Challenge

Κάθε γύρος θα διαρκεί 1 λεπτό. Το drone θα αρχίζει από συγκεκριμένη θέση στο υπόστεγο και θα πρέπει να βγει έξω από αυτό χωρίς να χτυπήσει σε κάποιο κινούμενο τοίχο, οι οποίοι θα κινούνται σε διαφορετικές κατευθύνσεις. Ο διαιτητής θα μετρά πόσα δευτερόλεπτα χρειάστηκαν στο drone να βγει από το υπόστεγο. Το αρχικό σκορ ξεκινάει από 60 πόντους και μειώνεται όσο το drone παραμένει μέσα. Απαγορεύεται το drone να ακουμπήσει τους τοίχους. Κάθε επαφή θα τιμωρείται στο σκορ.

Τελικός

Ο διαγωνισμός είναι οργανωμένος σε διαδοχικά προκριματικά sessions όπου κάθε drone θα αντιμετωπίζει σταδιακά διαφορετικά "ποντίκια" τα οποία θα είναι πιο δύσκολο στο να ακολουθούνται και λιγότερος χρόνος στο να βγει έξω από το υπόστεγο. Κάθε session αποτελείται από δύο γύρους Cat and Mouse και δύο γύρους Escape from the Hangar. Το σκορ από όλους τους γύρους αθροίζεται και βγαίνει το συνολικό σκορ όλου του session.

Μετά το πρώτο προκριματικό session (Q1), τα 20 καλύτερα drones θα περάσουν στο επόμενο session (Q2). Μετά το δεύτερο session (Q2), τα 10 καλύτερα drones θα περάσουν στο τελευταίο session (Q3). Στο Q3 αποφασίζονται οι τελικές θέσεις του διαγωνισμού. Ο νικητής του διαγωνισμού θα είναι το drone "γάτα" με το μεγαλύτερο σκορ στο Q3, που έμεινε περισσότερη ώρα κοντά στο "ποντίκι" και βγήκε έξω από το υπόστεγο πιο γρήγορα.

Η κριτική επιτροπή θα αποτελείται από έμπειρα άτομα στον χώρο της ρομποτικής και θα έχει την δυνατότητα να ακυρώσει τον νικητή, εάν η λύση του δεν ανταποκρίνεται στις προσδοκίες του διαγωνισμού και να αποβάλλει οποιονδήποτε διαγωνιζόμενο αν το drone του συγκρούει ασταμάτητα το "ποντίκι" ή τους τοίχους μέσα στο υπόστεγο. Γενικά, οι αποφάσεις τους έχουν την μεγαλύτερη ισχύ.

The Cat and Mouse challenge

Αυτή η πρόκληση έχει να κάνει με τον προγραμματισμό ενός έξυπνου drone που ονομάζεται drone "γάτα". Στόχος του είναι να αναζητήσει, να κυνηγήσει και να μείνει κοντά σε ένα παρόμοιο έξυπνο drone, το drone "ποντίκι". Το "ποντίκι" είναι κόκκινο για ευκολότερο εντοπισμό στις εικόνες. Ένας 3D κόσμος έχει ετοιμαστεί σαν άσκηση στον Gazebo Simulator. Στον κόσμο αυτόν θα υπάρχουν δύο ρομπότ: το AR.Drone το οποίο θα συμπεριφέρεται σαν ποντίκι (σε κόκκινο χρώμα) και το drone "γάτα" (σε μαύρο χρώμα). Δεν υπάρχουν άλλα εμπόδια γύρω από τον κόσμο πάρα μόνο στο έδαφος. Στην παρακάτω εικόνα φαίνεται ένα παράδειγμα που η "γάτα" κυνηγάει το "ποντίκι":

Ο κώδικάς σας θα υλοποιηθεί μέσα στα αντίστοιχα Jupyter notebooks του JdeRobot-Academy WebIDE. Ο κώδικάς σας θα αποφασίζει τις κατάλληλες κινήσεις του drone μέσω πληροφοριών που θα λαμβάνει από τους αισθητήρες του drone. Για τον προγραμματισμό του drone προτείνουμε:

  1. Την υλοποίηση μιας μεθόδου η οποία θα επιτρέπει να αναγνωρίζουμε μέσω της ληφθείσας εικόνας την τοποθεσία του "ποντικιού" σε πίξελς. Τυπικά, το κέντρο της μάζας των πίξελς που περνούν το κόκκινο φίλτρο μπορεί να είναι μια καλή προσέγγιση του κέντρου του "ποντικιού".
  2. Με το "ποντίκι" να ανιχνεύεται στην εικόνα, το επόμενο βήμα είναι να αποφασίσουμε ποια κίνηση είναι κατάλληλη για να ελέγξουμε τους μότορες της "γάτας" με την sendCMDVel() μέθοδο. Υπάρχουν πολλοί τρόποι για να το αποφασίσετε: έλεγχος βάσει περιπτώσεων, PID έλεγχος, automata, κλπ. Εδώ είναι που οι ικανότητές σας μπαίνουν στο παιχνίδι!
Στην αρχή του notebook, το αυτόματο "ποντίκι" θα ξεκινήσει. Έχει ετοιμαστεί, επίσης, ένα εκπαιδευτικό "ποντίκι" που υλοποιεί τις περισσότερες κινήσεις που θα βρείτε στον διαγωνισμό. Οι κινήσεις του "ποντικιού" έχουν μια αυξητική δυσκολία, ξεκινώντας με πολύ απλές κινήσεις σε μικρή ταχύτητα, συνεχίζοντας με πιο σύνθετες κινήσεις σε μέτρια ταχύτητα και τελείωνοντας με ακόμα πιο σύνθετες κινήσεις σε μέγιστη ταχύτητα.

The Escape from the Hangar challenge

Αυτή η πρόκληση έχει να κάνει με τον προγραμματισμό ενός έξυπνου drone που θα πρέπει να απογειωθεί και να βγει έξω από ένα υπόστεγο με αεροπλάνα. Ένας 3D κόσμος έχει ετοιμαστεί σαν άσκηση στον Gazebo Simulator. Στο κόσμο αυτό θα υπάρχει μόνο ένα ρομπότ: το AR.Drone σε μαύρο χρώμα. Θα υπάρχουν, επίσης, έξι κινούμενοι τοίχοι σαν κινούμενα εμπόδια. Οι κινήσεις τους είναι τυχαίες και κάνουν δύσκολη την διαφυγή του drone έξω από το υπόστεγο. Δεν επιτρέπεται η σύγκρουση. Το σημείο εκκίνησης του drone μπορεί να αλλάζει κατά την διάρκεια του διαγωνισμού, οπότε προτείνεται να αποφευχθεί μια στάνταρ θέση εκκίνησης.

Drone Programming

Όλο το πρόγραμμα θα υλοποιηθεί στο Jupyter notebook και θα περιέχει τον κατάλληλο κώδικα για τον έλεγχο της συμπεριφοράς του drone. Η συμπεριφορά του drone θα αποτελείται από ένα κομμάτι αντίληψης και ένα κομμάτι ελέγχου. Το κομμάτι της αντίληψης θα συλλέγει δεδομένα από τους αισθητήρες του drone (κυρίως μέσω κάμερας), θα τα αναλύει και θα εξάγει σημαντικές πληροφορίες για αυτά. Το κομμάτι του ελέγχου θα αποφασίζει ποια κίνηση είναι κατάλληλη και θα δίνει τις εντολές για να πραγματοποιηθούν οι ανάλογες κινήσεις στους μότορες του ρομπότ.

Template επαναλαμβανομενου βρογχου

Ένα Jupyter notebook και ένα πρότυπο (template) θα δίνονται στους διαγωνιζόμενους έτσι ώστε να συμπεριλάβουν εκεί τον κώδικά τους. Το πρότυπο ακολουθεί μια μορφή επαναλαμβανόμενου βρόγχου (iterative loop), πραγματοποιεί επαναλήψεις καλώντας την μέθοδο Execute. Ο κώδικας για την αντίληψη και τον έλεγχο του drone θα πρέπει να προστεθεί σε αυτήν την μέθοδο. Το δοσμένο Jupyter notebook χρησιμοποιεί ROS και ICE interfaces για διάλογο με τον Gazebo Simulator. Επίσης, ο Gazebo διαθέτει plugins με τα οποία υλοποιεί τους αισθητήρες και τους ενεργοποιητές. Όλοι οι διάλογοι είναι κρυμμένοι από τον προγραμματιστή, ο οποίος έχει κάποιες μεθόδους σε Python ως διεπαφή για την ανάγνωση των δεδομένων από την κάμερα, GPS αισθητήρα και τον έλεγχος των μοτόρων του drone.

Για την εισαγωγή του κώδικα στην "γάτα" και συνεπώς την εφαρμογή του, σας προτείνουμε τα παρακάτω βήματα:

  1. Ανοίξτε την ανάλογη άσκηση στο JdeRobot-Academy WebIDE και εισάγετε τον κώδικα στο notebook, όπου η λειτουργία της εκτέλεσης να εμφανίζεται όπως φαίνεται στην παρακάτω εικόνα:

  1. Χρησιμοποιήστε το API που δίνεται για τον προγραμματισμό του ρομπότ και τις διαθέσιμες μεθόδους για να πετάξει το drone, να πάρουμε εικόνες, κλπ.

Το drone έχει δύο αισθητήρες (έναν μπροστά και έναν που κοιτάζει κάτω) και έναν 3D αισθητήρα τοποθεσίας (συνδυασμός GPS με IMU). Οι ενεργοποιητές του είναι οι τέσσερις μότορες στον έλικά του. Οι αισθητήρες και οι ενεργοποιητές του μπορούν να ρυθμιστούν μέσω του προγράμματος χρησιμοποιώντας το παρακάτω API.

Διαβαζοντας εικονες απο την καμερα

Η μπροστά και κάτω κάμερα του drone είναι διαθέσιμες αλλά όχι ταυτόχρονα. Μόνο μια μπορεί να είναι ενεργοποιημένη. Η εντολή getImage επιστρέφει την εικόνα της ενεργοποιημένης κάμερας του drone και την αποθηκεύει στην μεταβλητή droneImage. Από την στιγμή της αποθήκευσης, μπορούμε να διαχειριστούμε την μεταβλητή όπως επιθυμούμε.

droneImage = self.sensor.getImage()


Για την αλλαγή ενεργής κάμερας χρησιμοποιούμε την μέθοδο toggleCam.

self.sensor.toggleCam()


Για την πρόκληση Cat and Mouse θα χρειαστεί να ανιχνεύσετε το drone "ποντίκι". Το "ποντίκι" είναι κόκκινο. Συνήθως ανιχνεύεται αρκετά καλά στην εικόνα μέσω ενός προσαρμοσμένου HSV φίλτρου. Το παρεχόμενο Jupyter notebook έχει περισσότερες πληροφορίες για το πώς να ανιχνεύσεις στοιχεία καλύτερα. Για παράδειγμα, χρησιμοποιώντας το OpenCV machine vision library. Για να αλλάξει η εικόνα από inRGB σε HSV:

image_HSV = cv2.cvtColor()


Διαβαζοντας 3D θεση και προσανατολισμο (GPS+IMU)

Δύο συστήματα αναφοράς χρησιμοποιούνται στον διαγωνισμό: ένα absolute σύστημα και ένα robot relative σύστημα το οποίο βρίσκεται στο drone και κινείται με αυτό. Όλα τα παραπάνω φαίνονται στην εξής εικόνα:

Η παρακολούθηση του "ποντικιού" μπορεί να πραγματοποιηθεί χωρίς να είναι γνωστή η ακριβής του θέση στον κόσμο. Όμως, Θα ήταν χρήσιμη η οπτικοποίηση της αναζήτησης του "ποντικιού" όταν το drone δεν θα το βλέπει στην εικόνα του.

Η μέθοδος getPose3D είναι διαθέσιμη για να πάρουμε την 3D θέση και τον προσανατολισμό του drone στο καρτεσιανό σύστημα. Οι παρακάτω εντολές παίρνουν τις τρέχουσες συντεταγμένες του drone στον Gazebo:

self.sensor.getPose3D().x self.sensor.getPose3D().y self.sensor.getPose3D().z


Για να πάρουμε τον 3D προσανατολισμό του drone, σαν γραμμικό συνδυασμό:

self.sensor.getPose3D().q0 self.sensor.getPose3D().q1 self.sensor.getPose3D().q2 self.sensor.getPose3D().q3


Δινοντας κινηση στους μοτορες

Για να κινήσουμε το drone, χρησιμοποιούμε την μέθοδο sendCMDVel, εισάγοντας τις κατάλληλες παραμέτρους για την ταχύτητα:

self.drone.sendCMDVel(vx,vy,vz,ax,ay,az)


Υπάρχει έλεγχος της ταχύτητας κίνησης και της ταχύτητας περιστροφής. Οι ταχύτητες κίνησης ακολουθούν το reference σύστημα που φάνηκε παραπάνω στην εικόνα, σε συνδυασμό με το drone: vx μπροστά/πίσω, vy αριστερά/δεξιά και vz πάνω/κάτω. Η ταχύτητα περιστροφής δείχνει την περιστροφή γύρω από έναν κατακόρυφο άξονα, κάθετο προς το επίπεδο του drone. Η μέθοδος sendCMDVel() λαμβάνει 6 παραμέτρους: vy, vx, vz, yaw (περιστροφή γύρων από τον άξονα z), roll (περιστροφή γύρω από τον άξονα x), pitch (περιστροφή γύρω από τον άξονα y). Κάθε τιμή πρέπει να είναι -1 ή 1. Οι τιμές των roll και pitch δεν έχουν κάποια επίδραση στον Gazebo κόσμο.

Για παράδειγμα, η παρακάτω εντολή μετακινούν το drone μπροστά με ταχύτητα 0.5 (με τη μισή ισχύ). Η εντολή αυτή είναι ενεργή μέχρι να δοθεί καινούργια:

self.drone.sendCMDVel(0,0.5,0,0,0,0)


Η μέθοδος sendCMDVel() δίνει την δυνατότητα να τρέχετε διαφορετικές εντολές ταυτόχρονα. Η παρακάτω εντολή μετακινεί το drone μπροστά με ταχύτητα 0.5, δεξιά με ταχύτητα 0.4 και ταυτόχρονα πάνω στον άξονα z με 0.2 και περιστροφή στον άξονα z με 0.1:

self.drone.sendCMDVel(-0.4,0.5,0.2,0.1,0,0)


Τέλος, η παρακάτω εντολή σταματάει την κίνηση του drone:

self.drone.sendCMDVel(0,0,0,0,0,0)

Υποδομη Λογισμικου

Οι απαιτούμενες εγκαταστάσεις, για να έχετε το περιβάλλον να τρέχει στα ρομπότ σας για το διαγωνισμό, είναι αρκετά απλές. Χρειάζεται μόνο το Docker και ένας web browser. Ένα από τα μεγαλύτερα πλεονεκτήματα χρήσης αυτής της υποδομής είναι ότι παραμένει ίδια σε Linux, Windows και MaxOSX συσκευές.

  1. Εγκατάσταση του Docker στην συσκευή σας και κατέβασμα του επίσημου image του Program-A-Robot 2019 διαγωνισμού.
  2. Εγγραφή στο JdeRobot-Academy WebIDE.
  3. Προγραμματισμός και εκτέλεση του κώδικα.

Docker container

Το μόνο αναγκαίο είναι η εγκατάσταση του Docker, κατεβάστε το image που περιέχει όλη την υποδομή και ανοίξτε στο ρούτερ σας (αν εργάζεστε σε ιδιωτικό δίκτυο) το port 8888, το οποίο θα είναι το σημείο πρόσβασης μεταξύ της εφαρμογής και του JdeRobot περιβάλλοντος.

  • Για Ubuntu-Linux
sudo apt install docker.io

Για να κατεβάσετε το Docker image, θα πρέπει να εκτελέσετε στην κονσόλα την εξής εντολή:

sudo docker pull jderobot/academy-simulation

JdeRobot-Academy WebIDE

Sign up

Για να εγγραφείτε στο JdeRobot-Academy WebIDE πηγαίνετε σε αυτήν την σελίδα , κάντε κλικ πάνω δεξιά στο "EXERCISES" και πατήστε το "Sign up". Μόλις εγγραφείτε στο WebIDE, θα έχετε πλήρη πρόσβαση για να προετοιμάσετε τις προκλήσεις σας για μισό χρόνο.

Υλοποιηση κωδικα για τις προκλησεις και testing

Για την εκκίνηση της πρόκλησης που θέλετε να υλοποιήσετε θα πρέπει:

  1. Να κάνετε login στο JdeRobot-Academy WebIDE.
  2. Να πάτε στο "EXERCISES", εκεί θα βρείτε τα challenges.

  1. Επιλέξτε την πρόκληση με την οποία θέλετε να εργαστείτε (Cat and Mouse or Escape from Hangar) πατώντας το αντίστοιχο κουμπί "Local Simulation".
  2. Εκτελέστε την εντολή που ξεκινάει το αντίστοιχο Docker container.

  • Για το Cat and Mouse challenge:
  • docker run -p 8888:8888 -p 8080:8080 -e DISPLAY=:0 -e JDEROBOT_SIMULATION_TYPE='LOCAL' --entrypoint '/root/entrypoint_local_user.sh' -it jderobot/academy-simulation:latest ardrone-trees-simple.launch
  • Για το Escape from the Hangar challenge:
  • docker run -p 8888:8888 -p 8080:8080 -e DISPLAY=:0 -e JDEROBOT_SIMULATION_TYPE='LOCAL' --entrypoint '/root/entrypoint_local_user.sh' -it jderobot/academy-simulation:latest hangar.launch
  1. Εισάγετε τον κώδικα στο ανάλογο Jupyter notebook στον browser.
  2. Τρέξτε τον κώδικα και ελέγξτε τα αποτελέσματα.

Όταν φορτώσει η προσομοίωση, θα εμφανιστούν δύο στήλες. Στα αριστερά, βρίσκεται το Jupyter notebook, κάποιες θεωρητικές συμβουλές και τα κομμάτια κώδικα που θα πρέπει κάθε διαγωνιζόμενος να συμπληρώσει. Στα δεξιά, βρίσκεται ο Gazebo simulator, ο οποίος θα ανταποκρίνεται στις εντολές που έχουν εισαχθεί στο notebook.

Συχνες Ερωτησεις (FAQ)

Μπορώ να λάβω μέρος στο διαγωνισμό χωρίς να παρευρεθώ;
Ναι, μπορείς!
Ποιος μπορεί να συμμετάσχει;
Οποιοσδήποτε, είναι ανοιχτός διαγωνισμός.
Μπορώ να χρησιμοποιήσω άλλο middleware ή άλλη γλώσσα προγραμματισμού για το drone;
Όχι για τον διαγωνισμό αυτόν. Εκτός πλαισίων διαγωνισμού, μπορείς να χρησιμοποιήσεις ότι θέλεις. Για να είναι δίκαιο, όλοι οι διαγωνιζόμενοι χρησιμοποιούν την ίδια έκδοση του Gazebo simulator, Python γλώσσα και το ίδιο JdeRobot-Academy WebIDE.
Η προγραμματιστική υποδομή του διαγωνισμού δουλεύει μόνο σε Linux;
Όχι, έχει ελεγχθεί και τρέχει κανονικά σε Linux, Microsoft-Windows και MacOS υπολογιστές.