Πίνακας περιεχομένων:
2025 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2025-01-13 06:57
github.com/AIWintermuteAI/ros-moveit-arm.git
Στο προηγούμενο μέρος του άρθρου δημιουργήσαμε αρχεία URDF και XACRO για τον ρομποτικό μας βραχίονα και ξεκινήσαμε το RVIZ για τον έλεγχο του ρομποτικού μας βραχίονα σε προσομοιωμένο περιβάλλον.
Αυτή τη φορά θα το κάνουμε με τον πραγματικό ρομποτικό βραχίονα! Θα προσθέσουμε τη λαβή, θα γράψουμε έναν ελεγκτή ρομπότ και (προαιρετικά) θα παράγουμε αντίστροφη κινηματική λύση IKfast.
Τζερόνιμο!
Βήμα 1: Προσθήκη του πιασίματος
Η προσθήκη gripper ήταν λίγο μπερδεμένη στην αρχή, έτσι παρέλειψα αυτό το μέρος στο προηγούμενο άρθρο. Τελικά δεν ήταν τόσο δύσκολο.
Θα χρειαστεί να τροποποιήσετε το αρχείο URDF για να προσθέσετε συνδέσμους και αρθρώσεις.
Το τροποποιημένο αρχείο URDF για το ρομπότ μου επισυνάπτεται σε αυτό το βήμα. Βασικά ακολουθεί την ίδια λογική με το τμήμα του βραχίονα, μόλις πρόσθεσα τρεις νέους συνδέσμους (claw_base, claw_r και claw_l) και τρεις νέες αρθρώσεις (ο σύνδεσμος5 είναι σταθερός και ο σύνδεσμος6, ο σύνδεσμος7 είναι περιστρεφόμενοι σύνδεσμοι).
Αφού τροποποιήσετε το αρχείο URDF, θα πρέπει επίσης να ενημερώσετε το πακέτο και το αρχείο xacro που δημιουργήθηκε για το MoveIt, χρησιμοποιώντας τον βοηθό εγκατάστασης του MoveIt.
Εκκινήστε τον βοηθό εγκατάστασης με την ακόλουθη εντολή
roslaunch moveit_setup_assistant setup_assistant.launch
Κάντε κλικ στην Επεξεργασία υπάρχουσας διαμόρφωσης MoveIt και επιλέξτε το φάκελο με το πακέτο MoveIt.
Προσθέστε νέα πτυσσόμενη ομάδα προγραμματισμού (με συνδέσμους και συνδέσμους για τη λαβή) και επίσης ένα τελικό εφέ. Οι ρυθμίσεις μου βρίσκονται στα παρακάτω στιγμιότυπα οθόνης. Παρατηρήστε ότι δεν επιλέγετε κινηματική λύση για τη λαβή, δεν είναι απαραίτητο. Δημιουργήστε το πακέτο και αντικαταστήστε τα αρχεία.
Τρέξιμο
catkin make
εντολή στο χώρο εργασίας catkin σας.
Εντάξει, τώρα έχουμε ένα χέρι με μια λαβή!
Βήμα 2: Χτίζοντας τον βραχίονα
Όπως ανέφερα πριν, το μοντέλο 3D arm είναι κατασκευασμένο από τον Juergenlessner, σας ευχαριστώ για μια καταπληκτική δουλειά. Μπορείτε να βρείτε τις λεπτομερείς οδηγίες συναρμολόγησης αν ακολουθήσετε τον σύνδεσμο.
Ωστόσο, έπρεπε να τροποποιήσω το σύστημα ελέγχου. Χρησιμοποιώ Arduino Uno με ασπίδα αισθητήρα για τον έλεγχο των servos. Η ασπίδα αισθητήρων βοηθά πολύ στην απλοποίηση της καλωδίωσης και επίσης καθιστά εύκολη την παροχή εξωτερικής ισχύος σε σερβιτόρους. Χρησιμοποιώ προσαρμογέα ισχύος 12V 6A ενσύρματος μέσω μονάδας αναβάθμισης (6V) στο Sensor Shield.
Μια σημείωση για τα servos. Χρησιμοποιώ servos MG 996 HR που αγοράστηκαν από το Taobao, αλλά η ποιότητα είναι πραγματικά κακή. Είναι σίγουρα ένα φθηνό κινέζικο knock-off. Αυτό για την άρθρωση του αγκώνα δεν παρείχε αρκετή ροπή και μάλιστα άρχισε να καπνίζει μία φορά κάτω από μεγάλο φορτίο. Έπρεπε να αντικαταστήσω το σερβο αγκώνα με MG 946 HR από έναν κατασκευαστή καλύτερης ποιότητας.
Εν συντομία - αγοράστε ποιοτικά σερβίτσια. Εάν βγαίνει μαγικός καπνός από τα servos σας, χρησιμοποιήστε καλύτερα servos. Τα 6V είναι μια πολύ ασφαλής τάση, μην την αυξάνετε. Δεν θα αυξήσει τη ροπή, αλλά μπορεί να βλάψει τα servos.
Καλωδίωση για servos ως εξής:
βάση 2
ώμος 2 4 ώμος1 3
αγκώνας 6
λαβή 8
καρπός 11
Μη διστάσετε να το αλλάξετε αρκεί να θυμηθείτε επίσης να αλλάξετε το σκίτσο του Arduino.
Αφού τελειώσετε με το υλικό, ας ρίξουμε μια ματιά στη μεγαλύτερη εικόνα!
Βήμα 3: MoveIt RobotCommander Interface
Και τώρα τι? Γιατί χρειάζεστε ούτως ή άλλως το MoveIt και το ROS; Δεν μπορείτε απλώς να ελέγξετε το χέρι μέσω του κώδικα Arduino απευθείας;
Ναι μπορείς.
Εντάξει, τώρα τι θα λέγατε να χρησιμοποιήσετε GUI ή Python/C ++ κώδικα για να παρέχετε στάση ρομπότ; Μπορεί το Arduino να το κάνει αυτό;
Περίπου. Για αυτό θα χρειαστεί να γράψετε έναν αντίστροφο κινηματικό διαλύτη ο οποίος θα λάβει μια στάση ρομπότ (συντεταγμένες μετάφρασης και περιστροφής σε τρισδιάστατο χώρο) και θα τον μετατρέψει σε μηνύματα κοινής γωνίας για servos.
Παρά το γεγονός ότι μπορείτε να το κάνετε μόνοι σας, είναι πολύ δουλειά. Έτσι, το MoveIt και το ROS παρέχουν μια ωραία διεπαφή για τον επιλύτη IK (αντίστροφη κινηματική) για να κάνει όλη τη βαριά τριγωνομετρική ανύψωση για εσάς.
Σύντομη απάντηση: Ναι, μπορείτε να κάνετε ένα απλό ρομποτικό χέρι που θα εκτελέσει ένα σκληρό κωδικοποιημένο σκίτσο Arduino για να μεταβείτε από τη μία στάση στην άλλη. Αλλά αν θέλετε να κάνετε το ρομπότ σας πιο έξυπνο και να προσθέσετε δυνατότητες όρασης στον υπολογιστή, το MoveIt και το ROS είναι ο καλύτερος τρόπος.
Έφτιαξα ένα πολύ απλοποιημένο διάγραμμα που εξηγεί πώς λειτουργεί το πλαίσιο MoveIt. Στην περίπτωσή μας θα είναι ακόμη πιο απλό, αφού δεν έχουμε σχόλια από τα servos μας και θα χρησιμοποιήσουμε το θέμα /joint_states για να παρέχουμε στο ρομπότ ελεγκτή τις γωνίες για servos. Μας λείπει μόνο ένα στοιχείο που είναι ο ελεγκτής ρομπότ.
Τι περιμένουμε? Ας γράψουμε μερικούς ελεγκτές ρομπότ, έτσι ώστε το ρομπότ μας να είναι … ξέρετε, πιο ελεγχόμενο.
Βήμα 4: Κωδικός Arduino για ελεγκτή ρομπότ
Στην περίπτωσή μας το Arduino Uno που εκτελεί έναν κόμβο ROS με rosserial θα είναι ο ελεγκτής ρομπότ. Ο κωδικός σκίτσου Arduino επισυνάπτεται σε αυτό το βήμα και είναι επίσης διαθέσιμος στο GitHub.
Ο κόμβος ROS που εκτελείται στο Arduino Uno εγγράφεται βασικά στο θέμα /JointState που δημοσιεύεται στον υπολογιστή που εκτελεί το MoveIt και στη συνέχεια μετατρέπει τις γωνίες άρθρωσης από τον πίνακα από ακτίνια σε μοίρες και τις μεταφέρει σε servos χρησιμοποιώντας την τυπική βιβλιοθήκη Servo.h.
Αυτή η λύση είναι λίγο χακερή και όχι πώς γίνεται με βιομηχανικά ρομπότ. Στην ιδανική περίπτωση υποτίθεται ότι δημοσιεύετε την τροχιά κίνησης στο θέμα /FollowJointState και στη συνέχεια λαμβάνετε τα σχόλια για το θέμα /JointState. Αλλά στο χέρι μας τα σερβίτσια χόμπι δεν μπορούν να παρέχουν τα σχόλια, οπότε θα εγγραφούμε απευθείας στο θέμα /JointState, που δημοσιεύτηκε από τον κόμβο FakeRobotController. Βασικά θα υποθέσουμε ότι οι όποιες γωνίες περάσαμε στα servos εκτελούνται ιδανικά.
Για περισσότερες πληροφορίες σχετικά με το πώς λειτουργεί το rosserial, μπορείτε να συμβουλευτείτε τα παρακάτω μαθήματα
wiki.ros.org/rosserial_arduino/Tutorials
Αφού ανεβάσετε το σκίτσο στο Arduino Uno, θα πρέπει να το συνδέσετε με το σειριακό καλώδιο στον υπολογιστή που εκτελεί την εγκατάσταση ROS.
Για να αναδείξετε ολόκληρο το σύστημα εκτελέστε τις ακόλουθες εντολές
roslaunch my_arm_xacro demo.launch rviz_tutorial: = true
sudo chmod -R 777 /dev /ttyUSB0
rosrun rosserial_python serial_node.py _port: =/dev/ttyUSB0 _baud: = 115200
Τώρα μπορείτε να χρησιμοποιήσετε διαδραστικούς δείκτες στο RVIZ για να μετακινήσετε τον βραχίονα ρομπότ σε πόζα και, στη συνέχεια, πατήστε Σχέδιο και εκτέλεση για να μετακινηθεί πραγματικά στη θέση.
Μαγεία!
Τώρα είμαστε έτοιμοι να γράψουμε κώδικα Python για τη δοκιμή ράμπας. Λοιπόν, σχεδόν…
Βήμα 5: (Προαιρετικό) Δημιουργία προσθήκης IKfast
Από προεπιλογή, το MoveIt προτείνει τη χρήση κινηματικής λύσης KDL, ο οποίος δεν λειτουργεί πραγματικά με λιγότερους από 6 βραχίονες DOF. Εάν ακολουθήσετε προσεκτικά αυτό το σεμινάριο, τότε θα παρατηρήσετε ότι το μοντέλο βραχίονα στο RVIZ δεν μπορεί να πάει σε ορισμένες πόζες που πρέπει να υποστηρίζονται από τη διαμόρφωση του βραχίονα.
Η συνιστώμενη λύση είναι να δημιουργήσετε προσαρμοσμένο κινηματικό λύτη χρησιμοποιώντας το OpenRave. Δεν είναι τόσο δύσκολο, αλλά θα πρέπει να το φτιάξετε και τις εξαρτήσεις του από την πηγή ή να χρησιμοποιήσετε το δοχείο docker, όποιο προτιμάτε.
Η διαδικασία είναι πολύ καλά τεκμηριωμένη σε αυτό το σεμινάριο. Έχει επιβεβαιωθεί ότι λειτουργεί σε VM που εκτελεί Ubuntu 16.04 και ROS Kinetic.
Χρησιμοποίησα την ακόλουθη εντολή για να δημιουργήσω τον επιλυτή
openrave.py -βάση δεδομένων inversekinematics --robot = arm.xml --iktype = translation3d --iktests = 1000
και μετά έτρεξε
rosrun moveit_kinematics create_ikfast_moveit_plugin.py test_robot arm my_arm_xacro ikfast0x1000004a. Translation3D.0_1_2_f3.cpp
για να δημιουργήσετε το πρόσθετο MoveIt IKfast.
Η όλη διαδικασία είναι λίγο χρονοβόρα, αλλά όχι πολύ δύσκολη αν ακολουθήσετε προσεκτικά το σεμινάριο. Εάν έχετε ερωτήσεις σχετικά με αυτό το μέρος, επικοινωνήστε μαζί μου στα σχόλια ή στο PM.
Βήμα 6: Το τεστ ράμπας
Τώρα είμαστε έτοιμοι να δοκιμάσουμε τη δοκιμή ράμπας, την οποία θα εκτελέσουμε χρησιμοποιώντας το ROS MoveIt Python API.
Ο κώδικας Python επισυνάπτεται σε αυτό το βήμα και είναι επίσης διαθέσιμος στο github repository. Εάν δεν έχετε ράμπα ή θέλετε να δοκιμάσετε μια άλλη δοκιμή, θα πρέπει να αλλάξετε τις θέσεις του ρομπότ στον κώδικα. Για την πρώτη εκτέλεση
rostopic echo/rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/feedback
στο τερματικό όταν εκτελείτε ήδη RVIZ και MoveIt. Στη συνέχεια, μετακινήστε το ρομπότ με διαδραστικούς δείκτες στην επιθυμητή θέση. Οι τιμές θέσης και προσανατολισμού θα εμφανιστούν στο τερματικό. Απλώς αντιγράψτε τα στον κώδικα Python.
Για να εκτελέσετε τη δοκιμαστική λειτουργία της ράμπας
rosrun my_arm_xacro pick/pick_2.py
με RVIZ και rosserial node ήδη σε λειτουργία.
Μείνετε συντονισμένοι για το τρίτο μέρος του άρθρου, όπου θα χρησιμοποιήσω τη στερεοφωνική κάμερα για την ανίχνευση αντικειμένων και θα εκτελέσω επιλογή και τοποθέτηση αγωγού για απλά αντικείμενα!