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

Robotic Arm: Jensen: 4 Βήματα
Robotic Arm: Jensen: 4 Βήματα

Βίντεο: Robotic Arm: Jensen: 4 Βήματα

Βίντεο: Robotic Arm: Jensen: 4 Βήματα
Βίντεο: Theo Jansen Mechanism Four Legged Spider Bot Mechanical Project 2024, Νοέμβριος
Anonim
Ρομποτικός βραχίονας: Jensen
Ρομποτικός βραχίονας: Jensen

Ο Jensen είναι ένας ρομποτικός βραχίονας που χτίστηκε στην πλατφόρμα Arduino με έμφαση στον διαισθητικό σχεδιασμό κίνησης, που έγινε ως ανεξάρτητο έργο 1 πίστωσης υπό την καθοδήγηση του Charles B. Malloch, PhD. Μπορεί να αναπαράγει μια σειρά κινήσεων προγραμματισμένες με χειροκίνητη κίνηση του βραχίονα. Πήρα την έμπνευση για να το φτιάξω βλέποντας άλλους ρομποτικούς βραχίονες κατασκευασμένους στον κατασκευαστικό χώρο του UMass Amherst M5. Επιπλέον, ήθελα να μάθω πώς να χρησιμοποιώ το λογισμικό CAD και ήθελα να κάνω ένα προηγμένο έργο Arduino. Το είδα ως ευκαιρία να κάνω όλα αυτά τα πράγματα.

Βήμα 1: Πρωτότυπος σχεδιασμός και πεδίο εφαρμογής

Πρωτότυπος σχεδιασμός και πεδίο εφαρμογής
Πρωτότυπος σχεδιασμός και πεδίο εφαρμογής

Το λογισμικό CAD που επέλεξα να μάθω για αυτό το έργο ήταν το OnShape και το πρώτο πράγμα που διαμόρφωσα ήταν ένα αναλογικό σερβο HiTec HS-422. Επέλεξα το σερβο γιατί μου ήταν διαθέσιμο τοπικά και ήταν μια λογική τιμή. Χρησίμευσε επίσης ως καλή πρακτική για την εκμάθηση του OnShape πριν προχωρήσω στο σχεδιασμό των δικών μου εξαρτημάτων. Σε αυτό το πρώιμο σημείο του έργου, είχα γενική ιδέα για το τι ήθελα να είναι ικανός ο βραχίονας. Iθελα να έχει ένα αξιοπρεπές εύρος κίνησης και μια λαβή για να μαζεύει πράγματα. Αυτές οι γενικές προδιαγραφές ενημέρωσαν το σχέδιο καθώς συνέχισα να το μοντελοποιώ σε CAD. Ένας άλλος περιορισμός σχεδιασμού που είχα σε αυτό το σημείο ήταν το μέγεθος του κρεβατιού εκτύπωσης στον τρισδιάστατο εκτυπωτή μου. Γι 'αυτό η βάση που βλέπετε στην παραπάνω φωτογραφία είναι ένα σχετικά πρωτόγονο τετράγωνο.

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

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

Βήμα 2: Έλεγχος

Ελεγχος
Ελεγχος

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

Σε αυτή τη μέθοδο ελέγχου, υπήρχαν πολλά πράγματα για να καταλάβουμε. Για να επιστρέψει κάθε σερβο σε μια αποθηκευμένη γωνία, έπρεπε με κάποιο τρόπο να "σώσω" αυτές τις γωνίες. Αυτό απαιτούσε το Arduino Uno που χρησιμοποιούσα για να μπορώ να λαμβάνω την τρέχουσα γωνία κάθε σερβο. Ο φίλος μου ο Jeremy Paradie, ο οποίος έφτιαξε ένα ρομποτικό χέρι που χρησιμοποιεί αυτή τη μέθοδο ελέγχου, με έδειξε να χρησιμοποιώ το εσωτερικό ποτενσιόμετρο κάθε σερβο χόμπι. Αυτό είναι το ποτενσιόμετρο που χρησιμοποιεί το σερβο για να κωδικοποιήσει τη γωνία του. Επέλεξα ένα σερβο δοκιμής, κόλλησα ένα σύρμα στο μεσαίο πείρο του εσωτερικού ποτενσιόμετρου και άνοιξα μια τρύπα στο περίβλημα για να τροφοδοτήσω το καλώδιο έξω.

Θα μπορούσα τώρα να λάβω την τρέχουσα γωνία διαβάζοντας την τάση στο μεσαίο πείρο του ποτενσιόμετρου. Ωστόσο, υπήρχαν δύο νέα προβλήματα. Πρώτον, υπήρχε θόρυβος με τη μορφή αιχμών τάσης στο σήμα που προέρχεται από τη μεσαία ακίδα. Αυτό το πρόβλημα έγινε πραγματικό ζήτημα αργότερα. Δεύτερον, το εύρος των τιμών για την αποστολή μιας γωνίας και τη λήψη μιας γωνίας ήταν διαφορετικές.

Το να λέμε στους σερβοκινητήρες χόμπι να κινούνται σε κάποια γωνία μεταξύ 0 και 180 μοιρών συνεπάγεται την αποστολή ενός σήματος PWM με υψηλό χρόνο που αντιστοιχεί στη γωνία. Αντίθετα, η χρήση ενός αναλογικού πείρου εισόδου του Arduino για την ανάγνωση της τάσης στο μεσαίο πείρο του ποτενσιόμετρου ενώ μετακινείτε τον σερβοκόρνα μεταξύ 0 και 180 μοιρών επιστρέφει ένα ξεχωριστό εύρος τιμών. Επομένως, χρειάζονταν κάποια μαθηματικά για να μεταφραστεί μια αποθηκευμένη τιμή εισόδου στην αντίστοιχη τιμή εξόδου PWM που απαιτείται για να επιστρέψει το σερβο στην ίδια γωνία.

Η πρώτη μου σκέψη ήταν να χρησιμοποιήσω έναν απλό χάρτη εύρους για να βρω την αντίστοιχη έξοδο PWM για κάθε αποθηκευμένη γωνία. Αυτό λειτούργησε, αλλά δεν ήταν πολύ ακριβές. Στην περίπτωση του έργου μου, το εύρος των τιμών υψηλού χρόνου PWM που αντιστοιχούν σε εύρος γωνίας 180 μοιρών ήταν πολύ μεγαλύτερο από το εύρος των αναλογικών τιμών εισόδου. Επιπλέον, και τα δύο αυτά εύρη δεν ήταν συνεχή και αποτελούνταν μόνο από ακέραιους αριθμούς. Επομένως, όταν αντιγράψαμε μια αποθηκευμένη τιμή εισόδου σε μια τιμή εξόδου, χάθηκε η ακρίβεια. Σε αυτό το σημείο κατάλαβα ότι χρειαζόμουν έναν βρόχο ελέγχου για να φτάσω τα servos μου εκεί που έπρεπε.

Έγραψα κώδικα για έναν βρόχο ελέγχου PID στον οποίο η είσοδος ήταν η μέση τάση ακίδων και η έξοδος ήταν η έξοδος PWM, αλλά γρήγορα ανακάλυψα ότι χρειαζόμουν μόνο ολοκληρωμένο έλεγχο. Σε αυτό το σενάριο, η έξοδος και η είσοδος αντιπροσωπεύουν και τις δύο γωνίες, οπότε η προσθήκη αναλογικού και παραγώγου ελέγχου τείνει να το κάνει να υπερβεί ή να έχει ανεπιθύμητη συμπεριφορά. Μετά τη ρύθμιση του ενσωματωμένου ελέγχου, υπήρχαν ακόμα δύο προβλήματα. Πρώτον, εάν το αρχικό σφάλμα μεταξύ της τρέχουσας και της επιθυμητής γωνίας ήταν μεγάλο, το σερβο θα επιταχυνθεί πολύ γρήγορα. Θα μπορούσα να μειώσω τη σταθερά για τον ολοκληρωμένο έλεγχο, αλλά αυτό έκανε τη συνολική κίνηση πολύ αργή. Δεύτερον, η κίνηση ήταν πικρή. Αυτό ήταν αποτέλεσμα του θορύβου στο αναλογικό σήμα εισόδου. Ο βρόχος ελέγχου διαβάζει συνεχώς αυτό το σήμα, έτσι οι αυξήσεις τάσης προκάλεσαν νευρική κίνηση. (Σε αυτό το σημείο κινήθηκα επίσης από το σερβο δοκιμής μου στη διάταξη που απεικονίζεται παραπάνω. Έκανα επίσης ένα αντικείμενο βρόχου ελέγχου για κάθε σερβο στο λογισμικό.)

Έλυσα το πρόβλημα της υπερβολικά γρήγορης επιτάχυνσης βάζοντας ένα εκθετικά σταθμισμένο κινούμενο μέσο όρο (EWMA) φίλτρο στην έξοδο. Με τον μέσο όρο της εξόδου, οι μεγάλες αιχμές σε κίνηση μειώθηκαν (συμπεριλαμβανομένου του jitter από το θόρυβο). Ωστόσο, ο θόρυβος στο σήμα εισόδου ήταν ακόμα πρόβλημα, οπότε το επόμενο στάδιο του έργου μου προσπαθούσε να το λύσει.

Βήμα 3: Θόρυβος

Θόρυβος
Θόρυβος

Εικόνα Πάνω

Με κόκκινο χρώμα: αρχικό σήμα εισόδου

Με μπλε χρώμα: σήμα εισόδου μετά την επεξεργασία

Το πρώτο βήμα για τη μείωση του θορύβου στο σήμα εισόδου ήταν η κατανόηση της αιτίας του. Η ανίχνευση του σήματος σε έναν παλμογράφο αποκάλυψε ότι οι αυξήσεις τάσης συνέβαιναν με ρυθμό 50Hz. Έτυχε να γνωρίζω ότι το σήμα PWM που αποστέλλεται στα servos ήταν επίσης σε ρυθμό 50Hz, οπότε υπέθεσα ότι οι αυξήσεις τάσης είχαν κάποια σχέση με αυτό. Έκανα την υπόθεση ότι η κίνηση των servos προκαλούσε κατά κάποιο τρόπο αιχμές τάσης στον πείρο V+ των ποτενσιόμετρων, κάτι που με τη σειρά του αναστάτωνε την ένδειξη στο μεσαίο πείρο.

Εδώ έκανα την πρώτη μου προσπάθεια να μειώσω τον θόρυβο. Άνοιξα ξανά κάθε σερβο και πρόσθεσα ένα καλώδιο που προέρχεται από τον πείρο V+ στο ποτενσιόμετρο. Χρειαζόμουν περισσότερες αναλογικές εισόδους για να τα διαβάσω από ό, τι είχε το Arduino Uno, οπότε κινήθηκα επίσης σε ένα Arduino Mega σε αυτό το σημείο. Στον κωδικό μου, άλλαξα τη γωνία εισόδου από αναλογική ένδειξη της τάσης στο μεσαίο πείρο σε αναλογία μεταξύ της τάσης στο μεσαίο πείρο και της τάσης στον πείρο V+. Η ελπίδα μου ήταν ότι αν υπήρχε άνοδος τάσης στις ακίδες, θα ακυρωνόταν στην αναλογία.

Τα έβαλα όλα μαζί και τα δοκίμασα, αλλά οι αιχμές συνέβαιναν ακόμα. Αυτό που έπρεπε να κάνω σε αυτό το σημείο ήταν να ερευνήσω το έδαφός μου. Αντίθετα, η επόμενη ιδέα μου ήταν να βάλω εντελώς τα ποτενσιόμετρα σε ξεχωριστό τροφοδοτικό. Αποσύνδεσα τα καλώδια V+ από τις αναλογικές εισόδους στο Arduino και τα συνδέσα σε ξεχωριστό τροφοδοτικό. Είχα ανιχνεύσει τις καρφίτσες πριν, οπότε ήξερα σε ποια τάση θα τους τροφοδοτούσα. Έκοψα επίσης τη σύνδεση μεταξύ της πλακέτας ελέγχου και του πείρου V+ σε κάθε σερβο. Έβαλα τα πάντα μαζί, επέστρεψα τον κωδικό εισαγωγής γωνίας στην κατάσταση που ήταν πριν και στη συνέχεια τον δοκίμασα. Όπως ήταν αναμενόμενο, δεν υπήρχαν άλλες αιχμές τάσης στον πείρο εισόδου. Ωστόσο, υπήρχε ένα νέο πρόβλημα - η τοποθέτηση των ποτενσιόμετρων σε ξεχωριστό τροφοδοτικό είχε καταστρέψει εντελώς τους εσωτερικούς βρόχους ελέγχου των σερβομηχανών. Παρόλο που οι ακίδες V+ δέχονταν την ίδια τάση με πριν, η κίνηση των σερβομηχανών ήταν ασταθής και ασταθής.

Δεν κατάλαβα γιατί συνέβαινε αυτό, οπότε τελικά διερεύνησα τη σύνδεση εδάφους μου στα σερβο. Υπήρξε μια μέση πτώση τάσης περίπου 0,3 Volt σε όλη τη γη, και αυξήθηκε ακόμη περισσότερο όταν τα servos έβγαλαν ρεύμα. Thenταν σαφές για μένα τότε ότι αυτές οι καρφίτσες δεν θα μπορούσαν πλέον να θεωρηθούν "αλεσμένες" και θα μπορούσαν καλύτερα να χαρακτηριστούν ως καρφίτσες "αναφοράς". Οι πίνακες ελέγχου στα servos πρέπει να μετρούσαν την τάση στο μεσαίο πείρο του ποτενσιόμετρου σε σχέση τόσο με την τάση στο V+ όσο και με τους πείρους αναφοράς. Η τροφοδοσία των ποτενσιόμετρων χώρισε χωριστά αυτή τη σχετική μέτρηση επειδή τώρα αντί να συμβεί μια αύξηση τάσης σε όλες τις ακίδες, συνέβη μόνο στον πείρο αναφοράς.

Ο μέντοράς μου, Δρ Malloch, με βοήθησε να διορθώσω όλα αυτά και μου πρότεινε να μετρήσω επίσης την τάση στο μεσαίο πείρο σε σχέση με τους άλλους πείρους. Αυτό έκανα για την τρίτη και τελευταία μου προσπάθεια να μειώσω τον θόρυβο της γωνιακής εισόδου. Άνοιξα κάθε σερβο, ξανακόλλησα το σύρμα που είχα κόψει και πρόσθεσα ένα τρίτο καλώδιο που προερχόταν από τον πείρο αναφοράς στο ποτενσιόμετρο. Στον κωδικό μου, έκανα την εισαγωγή γωνίας ισοδύναμη με την ακόλουθη έκφραση: (μεσαία καρφίτσα - καρφίτσα αναφοράς) / (V+pin - pin αναφοράς). Το δοκίμασα και μείωσε με επιτυχία τα αποτελέσματα των αιχμών της τάσης. Επιπλέον, έβαλα επίσης ένα φίλτρο EWMA σε αυτήν την είσοδο. Αυτό το επεξεργασμένο σήμα και το αρχικό σήμα απεικονίζονται παραπάνω.

Βήμα 4: Αναδίπλωση των πραγμάτων

Αναδίπλωση των πραγμάτων
Αναδίπλωση των πραγμάτων

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

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

Έγγραφο CAD:

cad.onshape.com/documents/818ea878dda7ca2f…

Συνιστάται: