Πίνακας περιεχομένων:
- Βήμα 1: Υλικά
- Βήμα 2: Τρισδιάστατη εκτύπωση του ρομποτικού βραχίονα
- Βήμα 3: Ηλεκτρονικό μοντάζ
- Βήμα 4: Εφαρμογή Smartphone
- Βήμα 5: Ο κώδικας Arduino
- Βήμα 6: Αυτό είναι
Βίντεο: Robotic Arm Game - Smartphone Controller: 6 Steps
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:34
Γειά σου !
Εδώ ένα διασκεδαστικό καλοκαιρινό παιχνίδι: Ο ρομποτικός βραχίονας που ελέγχεται από Smartphone !!
Όπως μπορείτε να δείτε στο βίντεο, μπορείτε να ελέγξετε το βραχίονα με μερικά Joysticks στο smartphone σας.
Μπορείτε επίσης να αποθηκεύσετε ένα μοτίβο, το οποίο το ρομπότ θα αναπαράγει σε έναν βρόχο, προκειμένου να εκτελέσει μερικές επαναλαμβανόμενες εργασίες ως παράδειγμα. Αλλά αυτό το μοτίβο είναι διαμορφώσιμο όπως εσείς επιθυμείτε !!!!
Να είσαι δημιουργικός !
Βήμα 1: Υλικά
Εδώ μπορείτε να δείτε το υλικό που χρειάζεστε.
Θα σας κοστίσει περίπου 50 € για την κατασκευή αυτού του ρομποτικού βραχίονα. Το λογισμικό και τα εργαλεία μπορούν να αντικατασταθούν, αλλά τα χρησιμοποίησα για αυτό το έργο.
Βήμα 2: Τρισδιάστατη εκτύπωση του ρομποτικού βραχίονα
Το Robotic Arm εκτυπώθηκε 3D (με το prusa i3 μας).
Χάρη στον ιστότοπο "HowtoMechatronics.com", τα αρχεία του STL είναι φοβερά για να δημιουργήσουν ένα τρισδιάστατο χέρι.
Θα χρειαστούν περίπου 20 ώρες για να εκτυπωθούν όλα τα κομμάτια.
Βήμα 3: Ηλεκτρονικό μοντάζ
Το μοντάζ χωρίζεται σε 2 μέρη:
Ένα ηλεκτρονικό μέρος, όπου το arduino συνδέεται με τα servos μέσω των ψηφιακών ακίδων και με τη συσκευή Bluetooth (Rx, Tx).
Ένα τροφοδοτικό, όπου τα servos τροφοδοτούνται με 2 φορτιστές τηλεφώνου (5V, 2A max).
Βήμα 4: Εφαρμογή Smartphone
Η εφαρμογή έγινε στον εφευρέτη της εφαρμογής 2. Χρησιμοποιούμε 2 Joystick για τον έλεγχο 4 σερβο και 2 ακόμη κουμπιά για τον έλεγχο της τελικής λαβής.
Συνδέουμε το Arm και το Smartphone μαζί χρησιμοποιώντας μια μονάδα Bluetooth (HC-06).
Τέλος, μια λειτουργία αποθήκευσης επιτρέπει στον χρήστη να αποθηκεύσει έως και 9 θέσεις για τον βραχίονα.
Στη συνέχεια, ο βραχίονας θα μεταβεί σε αυτόματη λειτουργία, όπου θα αναπαράγει τις αποθηκευμένες θέσεις.
Βήμα 5: Ο κώδικας Arduino
// 08/19 - Έλεγχος ρομποτικού βραχίονα Smartphone
#include #define TRUE true #define FALSE false // ******************* ΔΗΛΩΣΕΙΣ ***************** ***********
λέξη rep? // mot envoyé du module Arduino ή smartphone
int chiffre_final = 0; int cmd = 3; // μεταβλητή commande du servo moteur (troisième fil (πορτοκαλί, κίτρινο)) int cmd1 = 5; // servo1 int cmd2 = 9; // servo2 int cmd3 = 10; // servo3 // int cmd4 = 10; // servo4 int cmd5 = 11; // pince int activ_saving = 0; Servo moteur; // on définit notre servomoteur Servo moteur1; Servo moteur2; Servo moteur3; // Servo moteur4; Servo moteur5; int step_angle_mini = 4; int step_angle = 3; γωνία int, γωνία1, γωνία3, γωνία5, γωνία2; // γωνία int pas; int r, r1, r2, r3; int εγγραφέας? boolean fin = FALSE? boolean fin1 = FALSE? boolean fin2 = FALSE? boolean fin3 = FALSE? boolean fin4 = FALSE? λέξη w? // μεταβλητή Envoyé du smartphone au module Arduino int sauvegarde_positions1 [5]; int sauvegarde_positions2 [5]; int sauvegarde_positions3 [5]; int sauvegarde_positions4 [5]; int sauvegarde_positions5 [5]; int sauvegarde_positions6 [5]; int sauvegarde_positions7 [5]; int sauvegarde_positions8 [5]; int sauvegarde_positions9 [5];
// int γωνία; // γωνία περιστροφής (0 έως 180)
// ******************** ΡΥΘΜΙΣΗ ************************* ******** void setup () {sauvegarde_positions1 [0] = sauvegarde_positions1 [1] = sauvegarde_positions1 [2] = sauvegarde_positions1 [3] = sauvegarde_positions1 [4] = 0; sauvegarde_positions2 [0] = sauvegarde_positions2 [1] = sauvegarde_positions2 [2] = sauvegarde_positions2 [3] = sauvegarde_positions2 [4] = 0; sauvegarde_positions3 [0] = sauvegarde_positions3 [1] = sauvegarde_positions3 [2] = sauvegarde_positions3 [3] = sauvegarde_positions3 [4] = 0; sauvegarde_positions4 [0] = sauvegarde_positions4 [1] = sauvegarde_positions4 [2] = sauvegarde_positions4 [3] = sauvegarde_positions4 [4] = 0; sauvegarde_positions5 [0] = sauvegarde_positions5 [1] = sauvegarde_positions5 [2] = sauvegarde_positions5 [3] = sauvegarde_positions5 [4] = 0; sauvegarde_positions6 [0] = sauvegarde_positions6 [1] = sauvegarde_positions6 [2] = sauvegarde_positions6 [3] = sauvegarde_positions6 [4] = 0; sauvegarde_positions7 [0] = sauvegarde_positions7 [1] = sauvegarde_positions7 [2] = sauvegarde_positions7 [3] = sauvegarde_positions7 [4] = 0; sauvegarde_positions8 [0] = sauvegarde_positions8 [1] = sauvegarde_positions8 [2] = sauvegarde_positions8 [3] = sauvegarde_positions8 [4] = 0; sauvegarde_positions9 [0] = sauvegarde_positions9 [1] = sauvegarde_positions9 [2] = sauvegarde_positions9 [3] = sauvegarde_positions9 [4] = 0; moteur.attach (cmd); // on relie l'objet au pin de commande moteur1.attach (cmd1); moteur2.attach (cmd2); moteur3.attach (cmd3); // moteur4.attach (cmd4); moteur5.attach (cmd5); moteur.write (6); γωνία = 6; moteur1.write (100); γωνία1 = 100; moteur2.write (90); moteur3.write (90); //moteur4.write(12); moteur5.write (90); γωνία = 6; γωνία1 = 100; γωνία2 = 90; γωνία3 = 90; γωνία5 = 90; Serial.begin (9600); // permettra de communiquer au module Bluetooth} // ******************* BOUCLE ****************** ***************** void loop () {
// Serial.print ("γωνία");
//Serial.print(angle);Serial.print ("\ t"); Serial.print (angle1); Serial.print ("\ t"); Serial.print (angle2); Serial.print ("\ t "); Serial.print (angle3); Serial.print (" / t "); Serial.print (angle5); Serial.print (" / n ");
//Serial.print("angle ");
int i? w = δεξαμενή (); // on va recevoir une information du smartphone, la variable w w switch (w) {case 1: TouchDown_Release (); break; περίπτωση 2: TouchDown_Grab (); διάλειμμα; περίπτωση 3: Base_Rotation (); break; περίπτωση 4: Base_AntiRotation (); διάλειμμα; περίπτωση 5: Waist_Rotation (); break; περίπτωση 6: Waist_AntiRotation (); διάλειμμα; περίπτωση 7: Third_Arm_Rotation (); break; περίπτωση 8: Third_Arm_AntiRotation (); διάλειμμα; περίπτωση 9: Fourth_Arm_Rotation (); break; περίπτωση 10: Fourth_Arm_AntiRotation (); διάλειμμα; // περίπτωση 11: Fifth_Arm_Rotation (); break; // περίπτωση 12: Fifth_Arm_AntiRotation (); διάλειμμα; υπόθεση 21: Serial.print ("κουμπί θήκης 1"); chiffre_final = 1; sauvegarde_positions1 [0] = γωνία; sauvegarde_positions1 [1] = angle1; sauvegarde_positions1 [2] = angle2; sauvegarde_positions1 [3] = angle3_posu_garde_4] = angle5; Serial.println (sauvegarde_positions1 [1]); Serial.println (sauvegarde_positions1 [2]); Serial.println (sauvegarde_positions1 [3]); Serial.println (sauvegarde_positions1 [4]); Διακοπή; περίπτωση 22: chiffre_final = 2; sauvegarde_positions2 [0] = γωνία; sauvegarde_positions2 [1] = angle1; sauvegarde_positions2 [2] = angle2; sauvegarde_positions2 [3] = angle3; sauvegarde_positions2 [4] = angle5; Διακοπή; περίπτωση 23: chiffre_final = 3; sauvegarde_positions3 [0] = γωνία; sauvegarde_positions3 [1] = γωνία1; sauvegarde_positions3 [2] = angle2; sauvegarde_positions3 [3] = angle3; sauvegarde_positions3 [4] = γωνία5; περίπτωση 24: chiffre_final = 4; sauvegarde_positions4 [0] = γωνία; sauvegarde_positions4 [1] = angle1; sauvegarde_positions4 [2] = angle2; sauvegarde_positions4 [3] = angle3; sauvegarde_positions4 [4] = angle5; Διακοπή; περίπτωση 25: chiffre_final = 5; sauvegarde_positions5 [0] = γωνία; sauvegarde_positions5 [1] = angle1; sauvegarde_positions5 [2] = angle2; sauvegarde_positions5 [3] = angle3; sauvegarde_positions5 [4] = angle5; Διακοπή; περίπτωση 26: chiffre_final = 6; sauvegarde_positions6 [0] = γωνία; sauvegarde_positions6 [1] = angle1; sauvegarde_positions6 [2] = angle2; sauvegarde_positions6 [3] = angle3; sauvegarde_positions6 [4] = angle5; Διακοπή; περίπτωση 27: chiffre_final = 7; sauvegarde_positions7 [0] = γωνία; sauvegarde_positions7 [1] = angle1; sauvegarde_positions7 [2] = angle2; sauvegarde_positions7 [3] = angle3; sauvegarde_positions7 [4] = angle5; Διακοπή; περίπτωση 28: chiffre_final = 8; sauvegarde_positions8 [0] = γωνία; sauvegarde_positions8 [1] = angle1; sauvegarde_positions8 [2] = angle2; sauvegarde_positions8 [3] = angle3; sauvegarde_positions8 [4] = angle5; Διακοπή; περίπτωση 29: chiffre_final = 9; sauvegarde_positions9 [0] = γωνία; sauvegarde_positions9 [1] = angle1; sauvegarde_positions9 [2] = angle2; sauvegarde_positions9 [3] = angle3; sauvegarde_positions9 [4] = angle5; Διακοπή;
περίπτωση 31: Serial.print ("31"); activ_saving = 1; chiffre_final = 0; διάλειμμα; // ΑΡΧΗ
περίπτωση 33: Serial.print ("33"); activ_saving = 0; break; // BUTTON SAVE προεπιλογή: break; } if (w == 32) {Serial.print ("\ nΑναπαραγωγή / nΤελευταίο τσίφρο:"); Serial.print (chiffre_final); Serial.print ("\ n Θέση Sauvegarde 1: / n"); για (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions1 ); Serial.print ("\ t");} Serial.print ("\ n Sauvegarde position 2: / n"); για (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions2 ); Serial.print ("\ t");} Serial.print ("\ / Sauvegarde position 3: / n"); για (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions3 ); Serial.print ("\ t");} για (i = 1; i <= chiffre_final; i ++) {Serial εκτύπωση ("\ n / n ΑΡΧΗ / nΑργύρωση:"); Serial.print (i); Serial.print ("\ n"); διακόπτης (i) {περίπτωση 1: goto_moteur (*(sauvegarde_positions1)); καθυστέρηση (200). goto_moteur1 (*(sauvegarde_positions1+1)); καθυστέρηση (200)? goto_moteur2 (*(sauvegarde_positions1+2)); καθυστέρηση (200); goto_moteur3 (*(sauvegarde_positions1+3)); καθυστέρηση (200)? goto_moteur5 (*(sauvegarde_positions1+4)); καθυστέρηση (200); Διακοπή; περίπτωση 2: goto_moteur (*(sauvegarde_positions2)); καθυστέρηση (200). goto_moteur1 (*(sauvegarde_positions2+1)); καθυστέρηση (200)? goto_moteur2 (*(sauvegarde_positions2+2)); καθυστέρηση (200). goto_moteur3 (*(sauvegarde_positions2+3)); καθυστέρηση (200)? goto_moteur5 (*(sauvegarde_positions2+4)); καθυστέρηση (200); Διακοπή; περίπτωση 3: goto_moteur (*(sauvegarde_positions3)); καθυστέρηση (200). goto_moteur1 (*(sauvegarde_positions3+1)); καθυστέρηση (200)? goto_moteur2 (*(sauvegarde_positions3+2)); καθυστέρηση (200); goto_moteur3 (*(sauvegarde_positions3+3)); καθυστέρηση (200)? goto_moteur5 (*(sauvegarde_positions3+4)); καθυστέρηση (200); Διακοπή; περίπτωση 4: goto_moteur (*(sauvegarde_positions4)); καθυστέρηση (200). goto_moteur1 (*(sauvegarde_positions4+1)); καθυστέρηση (200)? goto_moteur2 (*(sauvegarde_positions4+2)); καθυστέρηση (200); goto_moteur3 (*(sauvegarde_positions4+3)); καθυστέρηση (200)? goto_moteur5 (*(sauvegarde_positions4+4)); καθυστέρηση (200); Διακοπή; περίπτωση 5: goto_moteur (*(sauvegarde_positions5)); καθυστέρηση (200). goto_moteur1 (*(sauvegarde_positions5+1)); καθυστέρηση (200)? goto_moteur2 (*(sauvegarde_positions5+2)); καθυστέρηση (200); goto_moteur3 (*(sauvegarde_positions5+3)); καθυστέρηση (200)? goto_moteur5 (*(sauvegarde_positions5+4)); καθυστέρηση (200); Διακοπή; περίπτωση 6: goto_moteur (*(sauvegarde_positions6)); καθυστέρηση (200). goto_moteur1 (*(sauvegarde_positions6+1)); καθυστέρηση (200)? goto_moteur2 (*(sauvegarde_positions6+2)); καθυστέρηση (200); goto_moteur3 (*(sauvegarde_positions6+3)); καθυστέρηση (200)? goto_moteur5 (*(sauvegarde_positions6+4)); καθυστέρηση (200); Διακοπή; περίπτωση 7: goto_moteur (*(sauvegarde_positions7)); καθυστέρηση (200). goto_moteur1 (*(sauvegarde_positions7+1)); καθυστέρηση (200)? goto_moteur2 (*(sauvegarde_positions7+2)); καθυστέρηση (200); goto_moteur3 (*(sauvegarde_positions7+3)); καθυστέρηση (200)? goto_moteur5 (*(sauvegarde_positions7+4)); καθυστέρηση (200); Διακοπή; περίπτωση 8: goto_moteur (*(sauvegarde_positions8)); καθυστέρηση (200). goto_moteur1 (*(sauvegarde_positions8+1)); καθυστέρηση (200)? goto_moteur2 (*(sauvegarde_positions8+2)); καθυστέρηση (200); goto_moteur3 (*(sauvegarde_positions8+3)); καθυστέρηση (200)? goto_moteur5 (*(sauvegarde_positions8+4)); καθυστέρηση (200); Διακοπή; περίπτωση 9: goto_moteur (*(sauvegarde_positions9)); καθυστέρηση (200). goto_moteur1 (*(sauvegarde_positions9+1)); καθυστέρηση (200)? goto_moteur2 (*(sauvegarde_positions9+2)); καθυστέρηση (200); goto_moteur3 (*(sauvegarde_positions9+3)); καθυστέρηση (200)? goto_moteur5 (*(sauvegarde_positions9+4)); καθυστέρηση (200); Διακοπή; } Serial.print ("\ n ********************* FIN REPRODUCE ***************** / n "); καθυστέρηση (500)? }} /*Serial.print ("ντεμπούτο / n"); Serial.print (sauvegarde_positions1 [0]); Serial.print ("\ t"); Serial.print (sauvegarde_positions1 [1]); Serial.print ("\ t"); Serial.print (sauvegarde_positions1 [2]); Serial.print ("\ t"); Serial.print (sauvegarde_positions1 [3]); Serial.print ("\ t"); Serial.print (sauvegarde_positions1 [4]); Serial.print ("\ n"); Serial.print (sauvegarde_positions2 [0]); Serial.print ("\ t"); Serial.print (sauvegarde_positions2 [1]); Serial.print ("\ t"); Serial.print (sauvegarde_positions2 [2]); Serial.print ("\ t"); Serial.print (sauvegarde_positions2 [3]); Serial.print ("\ t"); Serial.print (sauvegarde_positions2 [4]); Serial.print ("\ n"); Serial.print (sauvegarde_positions3 [0]); Serial.print ("\ t"); Serial.print (sauvegarde_positions3 [1]); Serial.print ("\ t"); Serial.print (sauvegarde_positions3 [2]); Serial.print ("\ t"); Serial.print (sauvegarde_positions3 [3]); Serial.print ("\ t"); Serial.print (sauvegarde_positions3 [4]); Serial.print ("\ n"); Serial.print (sauvegarde_positions4 [0]); Serial.print ("\ t"); Serial.print (sauvegarde_positions4 [1]); Serial.print ("\ t"); Serial.print (sauvegarde_positions4 [2]); Serial.print ("\ t"); Serial.print (sauvegarde_positions4 [3]); Serial.print ("\ t"); Serial.print (sauvegarde_positions4 [4]); Serial.print ("\ n");
Serial.print ("\ nfin / n");*/
καθυστέρηση (100)? } // *************************** ΛΕΙΤΟΥΡΓΙΕΣ ***************** ******************
word recevoir () {// fonction permettant de recevoir l'information du smartphone
εάν (Serial.available ()) {w = Serial.read ();
Serial.flush ();
επιστροφή w? }}
void goto_moteur (int angle_destination)
{while (angle_destination angle+step_angle) {Serial.print ("\ n -------------- * * * * * * -------------- ---- / n "); Serial.print ("angle_destination = / t"); Serial.print (angle_destination); Serial.print ("\ n angle1 = / t"); Serial.print (angle); if (angle_destination angle + step_angle) {angle = angle + step_angle; moteur.write (angle);} καθυστέρηση (100); } moteur.write (angle_destination); } void goto_moteur1 (int angle_destination) {while (angle_destination angle1+step_angle) {Serial.print ("\ n -------------- * * * * * * ------- ----------- / n "); Serial.print ("angle_destination = / t"); Serial.print (angle_destination); Serial.print ("\ n angle2 = / t"); Serial.print (angle1); if (angle_destination angle1 +step_angle) {angle1 += step_angle? moteur1.write (angle1);;} καθυστέρηση (100); } moteur1.write (angle_destination); } void goto_moteur2 (int angle_destination) {
ενώ (γωνία_προσδιορισμού γωνίας2+γωνία βημάτων)
{Serial.print ("\ n -------------- * * * * * * ------------------ / n") ? Serial.print ("angle_destination = / t"); Serial.print (angle_destination); Serial.print ("\ n angle3 = / t"); Serial.print (angle2); if (angle_destination angle2 +step_angle) {angle2 += step_angle? moteur2.write (angle2);} καθυστέρηση (100); } moteur2.write (angle_destination); } void goto_moteur3 (int angle_destination) {
ενώ (γωνία_προορισμού γωνία3+γωνία βημάτων)
{Serial.print ("\ n -------------- * * * * * * ------------------ / n") ? Serial.print ("angle_destination = / t"); Serial.print (angle_destination); Serial.print ("\ n angle4 = / t"); Serial.print (angle3); if (angle_destination angle3 +step_angle) {angle3 += step_angle? moteur3.write (angle3);} καθυστέρηση (100); } moteur3.write (angle_destination); } void goto_moteur5 (int angle_destination) {
ενώ (γωνία_καθορισμού
{Serial.print ("\ n -------------- * * * * * * ------------------ / n") ? Serial.print ("angle_destination = / t"); Serial.print (angle_destination); Serial.print ("\ n angle5 = / t"); Serial.print (angle5); if (angle_destination angle5 +step_angle) {angle5 += step_angle? moteur5.write (angle5);} καθυστέρηση (100); } moteur5.write (angle_destination); }
άκυρο TouchDown_Release () // TouchDown Button Release
{if (angle5 <180) {angle5 = angle5+step_angle_mini; } moteur5.write (angle5); }
άκυρο TouchDown_Grab () // Αρπαγή κουμπιού TouchDown
{if (angle5> 0) {angle5 = angle5-step_angle_mini; } moteur5.write (angle5); } void Base_Rotation () {if (angle 0) {angle = angle-step_angle; } else γωνία = 0; moteur.write (γωνία); } void Waist_Rotation () {if (angle1 20) {angle1 = angle1-step_angle; } else angle1 = 20; moteur1.write (angle1); } void Third_Arm_Rotation () {if (angle2 0) {angle2 = angle2-step_angle; } moteur2.write (angle2); } void Fourth_Arm_Rotation () {if (angle3 = 0) {angle3 = angle3-step_angle_mini; } moteur3.write (angle3); }
Βήμα 6: Αυτό είναι
Ευχαριστώ για την παρακολούθηση, ελπίζω να το εκτιμήσατε!
Αν σας άρεσε αυτό το Instructable, μπορείτε σίγουρα να μας επισκεφθείτε για περισσότερα! =)
Συνιστάται:
Robotic Arm With Gripper: 9 βήματα (με εικόνες)
Robotic Arm With Gripper: Η συγκομιδή λεμονιών θεωρείται σκληρή δουλειά, λόγω του μεγάλου μεγέθους των δέντρων και επίσης λόγω του θερμού κλίματος των περιοχών όπου φυτεύονται λεμονιές. Γι 'αυτό χρειαζόμαστε κάτι άλλο για να βοηθήσουμε τους γεωργούς να ολοκληρώσουν τη δουλειά τους πιο
Arduino Based DIY Game Controller - Arduino PS2 Game Controller - Παίζοντας Tekken With DIY Arduino Gamepad: 7 Βήματα
Arduino Based DIY Game Controller | Arduino PS2 Game Controller | Παίζοντας Tekken With DIY Arduino Gamepad: Γεια σας παιδιά, το να παίζετε παιχνίδια είναι πάντα διασκεδαστικό, αλλά το παιχνίδι με το δικό σας προσαρμοσμένο χειριστήριο παιχνιδιών DIY είναι πιο διασκεδαστικό. Έτσι, θα κάνουμε έναν ελεγκτή παιχνιδιών χρησιμοποιώντας arduino pro micro σε αυτά τα εκπαιδευτικά
Robotic Arm Controlled by Arduino and PC: 10 Steps
Robotic Arm Controlled by Arduino and PC: Τα ρομποτικά μπράτσα χρησιμοποιούνται ευρέως στη βιομηχανία. Είτε πρόκειται για εργασίες συναρμολόγησης, είτε για συγκόλληση, είτε ακόμη για χρήση σε βάση του ISS (Διεθνής Διαστημικός Σταθμός), βοηθούν τους ανθρώπους στην εργασία ή αντικαθιστούν τον άνθρωπο εντελώς. Ο βραχίονας που έφτιαξα είναι μικρότερος
Xbox 360 ROBOTIC ARM [ARDUINO]: AXIOM ARM: 4 Βήματα
Xbox 360 ROBOTIC ARM [ARDUINO]: AXIOM ARM:
ROS MoveIt Robotic Arm Part 2: Robot Controller: 6 Steps
ROS MoveIt Robotic Arm Part 2: Robot Controller: https://github.com/AIWintermuteAI/ros-moveit-arm.gitΣτο προηγούμενο μέρος του άρθρου δημιουργήσαμε αρχεία URDF και XACRO για τον ρομποτικό μας βραχίονα και ξεκινήσαμε το RVIZ για τον έλεγχο του ρομποτικός βραχίονας σε προσομοιωμένο περιβάλλον. Αυτή τη φορά θα το κάνουμε με το πραγματικό