Πίνακας περιεχομένων:

Self-learning Chaotic Robot: 3 Βήματα
Self-learning Chaotic Robot: 3 Βήματα

Βίντεο: Self-learning Chaotic Robot: 3 Βήματα

Βίντεο: Self-learning Chaotic Robot: 3 Βήματα
Βίντεο: Я есть. Ты есть. Он есть_Рассказ_Слушать 2024, Ιούλιος
Anonim
Αυτομαθητικό χαοτικό ρομπότ
Αυτομαθητικό χαοτικό ρομπότ

Σας ενδιαφέρει η μηχανική μάθηση, ρομπότ AI και och; Δεν χρειάζεται να δουλέψεις σε κάποιο φανταχτερό πανεπιστήμιο. Αυτή είναι μια περιγραφή του χαοτικού ρομπότ μου. Είναι ένα πολύ απλό ρομπότ για να δείξει πώς να χρησιμοποιεί τον κώδικα αυτομάθησης και πώς να τον εφαρμόζει σε μια πλατφόρμα arduino, σε αυτή την περίπτωση λόγω Arduino. Είναι μια πολύ φθηνή πλατφόρμα!

Ο κώδικας εξελίσσει το ρομπότ έτσι ώστε το ρομπότ να μάθει να σέρνεται. Παίρνει ανατροφοδότηση από το ποντίκι που σέρνεται πίσω. Ο κώδικας είναι "γενετικός". Αυτό σημαίνει ότι μια σειρά ατόμων δοκιμάζονται και τα καλύτερα διατηρούνται και θα έχουν μωρά. Αυτό σημαίνει ότι ο κώδικας εξελίσσεται με εξελικτικό τρόπο.

Βήμα 1: Hardware AKA the Robot

Υλικό AKA το ρομπότ
Υλικό AKA το ρομπότ
Υλικό AKA το ρομπότ
Υλικό AKA το ρομπότ
Υλικό AKA το ρομπότ
Υλικό AKA το ρομπότ

Χρειάζεσαι:

- 1 Arduino Due

- 8 microservos

- 1 ποντίκι PS/2

- 1 μετατροπέας επιπέδου

- κάποια παραλλαγή ασπίδας αισθητήρα ή παρόμοια, κουράστηκα από την ασπίδα αισθητήρα και συγκόλλησα τη δική μου.

-σύρματα

-εξωτερικό τροφοδοτικό 5V για τα servos

- μερικά κομμάτια παλιοσίδερα, λίγη κόλλα και λίγο χαλύβδινο σπείρωμα. Και κασέτα!

Βάλτε λοιπόν το Due στο πάτωμα. Βάλτε τα servos σε ένα δαχτυλίδι γύρω του. Βάλτε τα μαζί με παλιοσίδερα, κόλλα και κλωστή. Αυτό είναι το μέρος του χάους! Δεδομένου ότι είναι χαοτικός στο σχεδιασμό του, είναι απρόβλεπτο να καθοριστεί πώς να κινηθεί για να το κάνει να σέρνεται. Αυτός είναι ο λόγος που ο κώδικας αυτομάθησης είναι ο δρόμος!

Συμβουλές: χρησιμοποιήστε μερικά αρκετά βαριά μεταλλικά μέρη, διευκολύνει το ρομπότ να κινηθεί.

Συνδέστε τα servos στα οφειλόμενα, στην περίπτωσή μου συνδέονται με D39, 41, 43, 45, 47, 49, 51, 53.

Συνδέστε τα servos στο εξωτερικό τροφοδοτικό 5V. Για αυτό, φτιάξτε κάποιο είδος ασπίδας ή χρησιμοποιήστε μια ασπίδα αισθητήρα ή παρόμοια. ΜΗΝ τροφοδοτείτε τα σερβίτσια από τον οφειλόμενο πείρο 5V, δεν είναι αρκετό, το Due θα καεί. Χρησιμοποίησα μια μικρή πλακέτα πρωτότυπου για να διανείμω το 5 V σε όλα τα servos. Αυτός ο πίνακας διατηρεί επίσης τον επιλογέα αλλαγής στάθμης για το ρολόι του ποντικιού PS/2 και τις γραμμές δεδομένων. Ο πίνακας τροφοδοτεί επίσης το ποντίκι με 5V. Θυμηθείτε να συνδέσετε τη γείωση από εξωτερική τροφοδοσία στο Arduino λόγω γείωσης! Τα σχήματα δείχνουν πώς να τα συνδέσετε όλα.

Συνδέστε το PS/2 στην τροφοδοσία (5V) και τη γείωση. Συνδέστε το ρολόι και τη γραμμή δεδομένων του PS/2 με το Due μέσω ενός επιλογέα επιπέδου. (το ρεύμα πηγαίνει 3,3V, το PS/2 πηγαίνει 5V). Συνδέστε το ρολόι στο D12 και τα δεδομένα στο D13.

Για λεπτομέρειες σχετικά με το πρωτόκολλο PS/2, αυτό είναι ένα πολύ καλό διδακτικό:

www.instructables.com/id/Optical-Mouse-Od…

Η βιβλιοθήκη PS/2 από jazzycamel που έχω χρησιμοποιήσει:

Βήμα 2: Ο κώδικας

Ο κώδικας
Ο κώδικας

Αρχικά επιτρέψτε μου να πω: ΔΕΝ είμαι προγραμματιστής. Ορισμένα μέρη είναι πολύ εκτεταμένα, ένας εξειδικευμένος προγραμματιστής θα μπορούσε φυσικά να το συντομεύσει και έτσι και έτσι.

Ο κώδικας είναι αυτομάθηση και αυτός είναι ο πυρήνας του έργου. Αυτό είναι το διασκεδαστικό μέρος του! Σημαίνει ότι το ρομπότ εξελίσσεται και γίνεται όλο και καλύτερο, σε αυτή την περίπτωση γίνεται καλύτερο στην ανίχνευση. Το εκπληκτικό σε αυτό είναι ότι το ρομπότ θα εξελιχθεί σε ό, τι κι αν το τροφοδοτήσετε. Σε αυτή την περίπτωση σέρνει ένα ποντίκι PS/2 και όσο περισσότερο το ποντίκι παρασύρεται, τόσο υψηλότερα σημεία παίρνει.

Αυτό σημαίνει επίσης ότι μπορείτε να χρησιμοποιήσετε αυτόν τον κωδικό για να εκπαιδεύσετε το ρομπότ σας να κάνει κάτι άλλο, αρκεί να μετρηθεί και να επιστρέψει στο ρομπότ!

Όπως μπορείτε να δείτε στις εικόνες, το ποντίκι σύρεται σε ένα λεπτό κορδόνι. Στην αρχή σύρθηκε στο καλώδιο του ποντικιού. Ωστόσο, το καλώδιο είναι κάπως σκληρό, έτσι το ρομπότ έμαθε να κουνάει το ποντίκι, αντί να το σέρνει. Η ανακίνηση παρήγαγε υψηλά σημεία…

Ο κωδικός χρησιμοποιεί 50 άτομα. Ο πυρήνας αυτού είναι ένας πίνακας 50x50 byte.

Ένα ξεχωριστό είναι ένας πίνακας byte. Όταν το άτομο χρησιμοποιείται για να τρέξει το ρομπότ, αυτό το άτομο αποστέλλεται σε μια συνάρτηση στον κώδικα που ονομάζεται "tolken".

Στην αρχή μιας διαδρομής υπάρχουν 8 μεταβλητές m1, m2, m3, m4, m5, m6, m7 και m8 (μία για κάθε σερβο). Σε αυτό το ρομπότ έχουν όλες σταθερές τιμές εκκίνησης. Σε "tolken" τα mś μετατρέπονται σε ένα βρόχο case/swich ανάλογα με τις τιμές του ατόμου. για παράδειγμα, μια τιμή "1" εκτελεί τα ακόλουθα: m1 = m1 + m2.

Εάν ένα άτομο είναι: 1, 2, 3, 0, 0, 0, 0….. τότε το mś θα μετατραπεί με τον ακόλουθο τρόπο:

m1 = m1 + m2;

m1 = m1 + m3;

m1 = m1 + m4;

Το Tolken είναι μια λίστα με 256 διαφορετικές μαθηματικές πράξεις, οπότε κάθε πιθανή τιμή του πίνακα επιμέρους αντιπροσωπεύει μια μαθηματική αλλαγή των τιμών m.

Η διαδικασία υποβολής τελών γίνεται 4 φορές, με ανάγνωση μεταξύ κάθε γύρου, δημιουργώντας τέσσερις διαφορετικούς κωδικούς κινητήρα για κάθε "m". Οι μοτοσικλέτες είναι οι τιμές που αποστέλλονται αργότερα στα servos.

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

Εάν κανένα άτομο δεν αποδίδει καθόλου, θα υπάρξει μετάλλαξη των ατόμων για τη δημιουργία νέων.

Μπορείτε να βρείτε τον κώδικα στο GitHub:

Βήμα 3: Πώς να το εκπαιδεύσετε;

Αυτό είναι το δύσκολο κομμάτι. Για να προπονηθείτε σωστά, πρέπει να το "επαναφέρετε" μετά από κάθε τρέξιμο. Αυτό σημαίνει ότι πρέπει να το βάζετε στην ίδια θέση κάθε φορά.

Έχω βάλει μερικά σημεία ελέγχου μέσα στον κώδικα για να βεβαιωθώ ότι το ρομπότ βρίσκεται στην αρχική του θέση.

Ευθυγραμμίστε λοιπόν το ρομπότ και αφήστε το να τρέξει.

Δοκιμάζει 4 άτομα και στη συνέχεια επιλέγει τα 2 καλύτερα για να γίνουν γονείς. Αφού αντικαταστήσει το χειρότερο με τα μωρά, εκτυπώνει ορισμένα δεδομένα για την απόδοση των ατόμων. Εκτυπώνει επίσης τον πίνακα 50x50. Είναι σοφό να το αντιγράψετε σε ένα φύλλο excel ή παρόμοιο. (ή γράψτε κάποιον κωδικό ανάγκης κατά την επεξεργασία) Εάν το Due επανεκκινήσει (αυτό συμβαίνει για διάφορους λόγους), τότε δεν θα χάσετε το εκπαιδευτικό σας έργο. Μπορείτε να αντιγράψετε/επικολλήσετε τη συστοιχία στον κώδικα και να συνεχίσετε την προπόνηση όταν μείνατε.

Το ρομπότ μου έμαθε να σέρνεται μετά από μερικές ώρες. Κατεβάστε το βίντεο για να το δείτε να ανιχνεύεται. Δεν πήγε στην κατεύθυνση που νόμιζα!

Δοκιμάστε επίσης διαφορετικά πατώματα! Το ρομπότ μου είχε καλύτερη απόδοση σε νάιλον χαλί.

Πιθανές βελτιώσεις:

1. Θα ήταν προτιμότερο να έχετε ένα ξεχωριστό nano για να διαβάσετε το ποντίκι PS/2 και να στείλετε την επεξεργασμένη απόσταση που μετακινείται πάνω από το σειριακό στο nano. Η ανάγνωση του ποντικιού PS/2 μου είναι λίγο τρεμάμενη. Αυτός είναι ο λόγος για την ανάγνωση/εκκαθάριση τμημάτων του κώδικα από το ποντίκι.

2. κάποιο είδος δοκιμαστικού εξοπλισμού που παρέσυρε το ρομπότ στην αρχική του θέση θα επιτάχυνε την εκπαίδευση.

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

Συνιστάται: