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

Ρομποτικός ελεγκτής ROS με βάση Matlab: 9 βήματα
Ρομποτικός ελεγκτής ROS με βάση Matlab: 9 βήματα

Βίντεο: Ρομποτικός ελεγκτής ROS με βάση Matlab: 9 βήματα

Βίντεο: Ρομποτικός ελεγκτής ROS με βάση Matlab: 9 βήματα
Βίντεο: Genetic versus Adaptive Intelligence (in Greek) #AI #lecture #διαλεξη #μαθημα 2024, Νοέμβριος
Anonim
Image
Image
Ρομποτικό ελεγκτή ROS με βάση Matlab
Ρομποτικό ελεγκτή ROS με βάση Matlab

Από τότε που ήμουν παιδί, πάντα ονειρευόμουν να γίνω Iron Man και το κάνω ακόμα. Ο Iron Man είναι ένας από αυτούς τους χαρακτήρες που είναι ρεαλιστικά εφικτός και απλά θέλω να γίνω Iron Man κάποια μέρα ακόμα κι αν οι άνθρωποι γελούν μαζί μου ή λένε ότι είναι αδύνατο επειδή "είναι αδύνατο μέχρι να το κάνει κάποιος"-Άρνολντ Σβαρτσενέγκερ.

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

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

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

πιστώσεις επεξεργασίας βίντεο: Ammar Akher, στο [email protected]

Προμήθειες

Τα ακόλουθα στοιχεία απαιτούνται για το έργο:

(1) ROS PC/Robot

(2) Δρομολογητής

(3) Η / Υ με MATLAB (έκδοση: 2014 ή νεότερη έκδοση)

Βήμα 1: Εγκατάσταση όλων

Λήψη όλων των ρυθμίσεων
Λήψη όλων των ρυθμίσεων

Για αυτό το διδάξιμο, χρησιμοποιώ το Ubuntu 16.04 για τον υπολογιστή μου linux και ros-kinetic, οπότε για να αποφύγω τη σύγχυση προτείνω τη χρήση ros kinetic και ubuntu 16.04 αφού έχει την καλύτερη υποστήριξη για ros-kinetic. Για περισσότερες πληροφορίες σχετικά με τον τρόπο εγκατάστασης του ros kinetic, επισκεφθείτε τη διεύθυνση https://wiki.ros.org/kinetic/Installation/Ubuntu. Για το MATLAB είτε αγοράζετε άδεια είτε κατεβάζετε μια έκδοση trail από εδώ.

Βήμα 2: Κατανόηση του τρόπου λειτουργίας του ελεγκτή

Κατανόηση του τρόπου λειτουργίας του ελεγκτή
Κατανόηση του τρόπου λειτουργίας του ελεγκτή

Ένας υπολογιστής τρέχει το ρομποτικό χειριστήριο στο MATLAB. Ο ελεγκτής λαμβάνει τη διεύθυνση IP και τη θύρα του ros pc/robot.

Ένα θέμα ros χρησιμοποιείται για επικοινωνία μεταξύ του ελεγκτή και του ros pc/robot, το οποίο λαμβάνεται επίσης ως είσοδος από τον ελεγκτή. Το μόντεμ απαιτείται για τη δημιουργία ενός LAN (τοπικό δίκτυο) και είναι αυτό που εκχωρεί τις διευθύνσεις IP σε όλες τις συσκευές που είναι συνδεδεμένες στο δίκτυό του. Επομένως, το ros pc/robot και ο υπολογιστής που εκτελεί τον ελεγκτή πρέπει να είναι και τα δύο συνδεδεμένα στο ίδιο δίκτυο (δηλ. Το δίκτυο του μόντεμ). Τώρα που ξέρετε "πώς λειτουργεί", ας πάμε στο "πώς είναι χτισμένο"…

Βήμα 3: Δημιουργία διεπαφής ROS-MATLAB

Δημιουργία διεπαφής ROS-MATLAB
Δημιουργία διεπαφής ROS-MATLAB
Δημιουργία διεπαφής ROS-MATLAB
Δημιουργία διεπαφής ROS-MATLAB
Δημιουργία διεπαφής ROS-MATLAB
Δημιουργία διεπαφής ROS-MATLAB

Το ROS-MATLABInterface είναι μια χρήσιμη διεπαφή για ερευνητές και φοιτητές για την πρωτοτυπία των αλγορίθμων ρομπότ τους στο MATLAB και τη δοκιμή τους σε ρομπότ συμβατά με ROS. Αυτή η διεπαφή μπορεί να δημιουργηθεί από την εργαλειοθήκη του συστήματος ρομποτικής στο matlab και μπορούμε να πρωτοτυπώσουμε τον αλγόριθμό μας και να τον δοκιμάσουμε ένα ρομπότ με δυνατότητα ROS ή σε προσομοιωτές ρομπότ όπως το Gazebo και το V-REP.

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

Βήμα 4: Λήψη της διεύθυνσης IP

Λήψη της διεύθυνσης IP
Λήψη της διεύθυνσης IP
Λήψη της διεύθυνσης IP
Λήψη της διεύθυνσης IP

Για να λειτουργήσει ο ελεγκτής είναι επιτακτική ανάγκη να γνωρίζετε τη διεύθυνση IP του ρομπότ/υπολογιστή σας ROS και τον υπολογιστή που εκτελεί τον ελεγκτή στο MATLAB.

Για να λάβετε το ip του υπολογιστή σας:

Στα Windows:

Ανοίξτε τη γραμμή εντολών και πληκτρολογήστε την εντολή ipconfig και σημειώστε τη διεύθυνση IPv4

Για Linux:

Πληκτρολογήστε την εντολή ifconfig και σημειώστε τη διεύθυνση inet. Τώρα που έχετε τη διεύθυνση IP, ήρθε η ώρα να δημιουργήσετε το GUI…

Βήμα 5: Δημιουργήστε ένα GUI για τον ελεγκτή

Δημιουργήστε ένα GUI για τον ελεγκτή
Δημιουργήστε ένα GUI για τον ελεγκτή
Δημιουργήστε ένα GUI για τον ελεγκτή
Δημιουργήστε ένα GUI για τον ελεγκτή
Δημιουργήστε ένα GUI για τον ελεγκτή
Δημιουργήστε ένα GUI για τον ελεγκτή

Για να δημιουργήσετε το GUI, ανοίξτε το MATLAB και πληκτρολογήστε οδηγό στο παράθυρο εντολών. Αυτό θα ανοίξει την εφαρμογή οδηγού, αν και θα δημιουργήσουμε το GUI μας. Μπορείτε επίσης να χρησιμοποιήσετε τον σχεδιαστή εφαρμογών στο MATLAB για να σχεδιάσετε το GUI σας.

Θα δημιουργήσουμε συνολικά 9 κουμπιά (όπως φαίνεται στο σχήμα):

6 κουμπιά: προς τα πίσω, προς τα πίσω, αριστερά, δεξιά, σύνδεση με ρομπότ, αποσύνδεση

3 Κουμπιά με δυνατότητα επεξεργασίας: Ros pp ip, port και όνομα θέματος.

Τα κουμπιά με δυνατότητα επεξεργασίας είναι τα κουμπιά που θα λάβουν το ip του υπολογιστή ROS, τη θύρα του και το όνομα του θέματος ως είσοδο. Το όνομα του θέματος είναι αυτό μέσω του οποίου επικοινωνούν ο ελεγκτής MATLAB και το ρομπότ/υπολογιστής ROS. Για να επεξεργαστείτε τη συμβολοσειρά στο επεξεργάσιμο κουμπί, κάντε δεξί κλικ στο κουμπί >> μεταβείτε στις ιδιότητες επιθεωρητή >> συμβολοσειρά και επεξεργαστείτε το κείμενο του κουμπιού.

Μόλις ολοκληρωθεί το GUI, μπορείτε να προγραμματίσετε τα κουμπιά. Εδώ ξεκινά η πραγματική διασκέδαση…

Βήμα 6: Προγραμματισμός των επεξεργάσιμων κουμπιών GUI

Προγραμματισμός των κουμπιών επεξεργασίας GUI
Προγραμματισμός των κουμπιών επεξεργασίας GUI
Προγραμματισμός των κουμπιών επεξεργασίας GUI
Προγραμματισμός των κουμπιών επεξεργασίας GUI
Προγραμματισμός των κουμπιών επεξεργασίας GUI
Προγραμματισμός των κουμπιών επεξεργασίας GUI
Προγραμματισμός των κουμπιών επεξεργασίας GUI
Προγραμματισμός των κουμπιών επεξεργασίας GUI

Το GUI αποθηκεύεται ως αρχείο.fig αλλά οι λειτουργίες κώδικα/επανάκλησης αποθηκεύονται σε μορφή.m. Το αρχείο.m περιέχει τον κώδικα για όλα τα κουμπιά σας. Για να προσθέσετε λειτουργίες επανάκλησης στα κουμπιά σας, κάντε δεξί κλικ στο κουμπί> > Προβολή επαναλήψεων >> επανάκληση. Αυτό θα ανοίξει το αρχείο.m για το GUI σας στο σημείο όπου έχει οριστεί το συγκεκριμένο κουμπί.

Η πρώτη επανάκληση που πρόκειται να κωδικοποιήσουμε είναι για το κουμπί επεξεργασίας IP ROS. Στην συνάρτηση edit1_Callback γράψτε τον ακόλουθο κώδικα:

λειτουργία edit1_Callback (hObject, datadata, λαβές)

παγκόσμιο ros_master_ip

ros_master_ip = get (hObject, 'String')

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

Στη συνέχεια, ακριβώς κάτω από το _OpeningFcn (hObject, eventdata, λαβές, varargin) ορίστε τα ακόλουθα (δείτε το σχήμα):

παγκόσμιο ros_master_ip

παγκόσμιο ros_master_port

παγκόσμιο teleop_topic_name

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topic_name = '/cmd_vel_mux/input/teleop';

Απλώς παγκοσμιοποιήσατε σε παγκόσμιο επίπεδο το ros-pc ip (ros_master_ip), το port (ros_master_port) και το όνομα Teleop Topic. Αυτό που κάνει είναι ότι αν αφήσετε κενά τα επεξεργάσιμα κουμπιά, αυτές οι προκαθορισμένες τιμές θα χρησιμοποιηθούν όταν συνδέεστε.

Η επόμενη επανάκληση που πρόκειται να κωδικοποιήσουμε είναι για το κουμπί Port editable.

Στην συνάρτηση edit2_Callback γράψτε τον ακόλουθο κώδικα:

λειτουργία edit2_Callback (hObject, datadata, λαβές)

παγκόσμιο ros_master_port

ros_master_port = get (hObject, 'String')

Εδώ η συνάρτηση ορίζεται ως edit2_Callback, η οποία αναφέρεται στο δεύτερο κουμπί με δυνατότητα επεξεργασίας. Όταν εισάγουμε τη θύρα ros pc/robot εδώ από το δίκτυο ROS σε αυτό το επεξεργάσιμο κουμπί, θα αποθηκεύσει τη θύρα ως συμβολοσειρά σε μια καθολική μεταβλητή που ονομάζεται ros_master_port.

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

Στην συνάρτηση edit3_Callback γράψτε τον ακόλουθο κώδικα:

λειτουργία edit3_Callback (hObject, datadata, λαβές)

παγκόσμιο teleop_topic_name

teleop_topic_name = get (hObject, 'String')

Παρόμοια με το ros_master_port, αυτό επίσης αποθηκεύεται ως συμβολοσειρά σε μια καθολική μεταβλητή.

Στη συνέχεια, θα εξετάσουμε τις λειτουργίες κλήσης για τα κουμπιά…

Βήμα 7: Προγραμματισμός των πλήκτρων GUI

Προγραμματισμός των πλήκτρων GUI
Προγραμματισμός των πλήκτρων GUI
Προγραμματισμός των πλήκτρων GUI
Προγραμματισμός των πλήκτρων GUI

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

π.χ. λειτουργία pushbutton6_Callback (hObject, eventdata, λαβές)

Σημείωση: ανάλογα με τη σειρά με την οποία δημιουργήσατε τα κουμπιά, θα αριθμούνται ανάλογα. Επομένως, η συνάρτηση pushbutton6 στο αρχείο μου.m θα μπορούσε να είναι Forward ενώ στο αρχείο.m σας θα μπορούσε να είναι προς τα πίσω, οπότε μην ξεχνάτε. Για να μάθετε ποια είναι η ακριβής λειτουργία για το κουμπί σας, απλώς κάντε δεξί κλικ στην επιλογή >> Προβολή επαναλήψεων >> κλήσεις και θα ανοίξει η λειτουργία για το κουμπί ώθησής σας, αλλά για αυτό το εκπαιδευτικό υποθέτω ότι είναι το ίδιο με το δικό μου.

Για το κουμπί Σύνδεση με ρομπότ:

Κάτω από τη λειτουργία pushbutton6_Callback (hObject, datadata, λαβές):

λειτουργία pushbutton6_Callback (hObject, eventdata, handles) καθολική ros_master_ip

παγκόσμιο ros_master_port

παγκόσμιο teleop_topic_name

παγκόσμιο ρομπότ

global velmsg

ros_master_uri = strcat ('https://', ros_master_ip, ':', ros_master_port)

setenv ('ROS_MASTER_URI', ros_master_uri)

rosinit

robot = rospublisher (teleop_topic_name, 'geometry_msgs/Twist');

velmsg = rosmessage (ρομπότ);

Αυτή η επανάκληση θα ορίσει τη μεταβλητή ROS_MASTER_URI συνδέοντας το ros_master_ip και τη θύρα. Στη συνέχεια, η εντολή rosinit θα αρχικοποιήσει τη σύνδεση. Μετά τη σύνδεση, θα δημιουργήσει έναν εκδότη του geometry_msgs/Twist, ο οποίος θα χρησιμοποιηθεί για την αποστολή της ταχύτητας εντολών. Το όνομα του θέματος είναι το όνομα που δίνουμε στο πλαίσιο επεξεργασίας. Μόλις η σύνδεση είναι επιτυχής, θα μπορούμε να χρησιμοποιούμε τα κουμπιά Εμπρός, Πίσω, Αριστερά, Δεξιά.

Πριν προσθέσουμε κλήσεις στα κουμπιά Forward, Backward push, πρέπει να αρχικοποιήσουμε τις ταχύτητες της γραμμικής και της γωνιακής ταχύτητας.

Επομένως, παρακάτω _OpeningFcn (hObject, eventdata, λαβές, varargin) ορίστε τα ακόλουθα (βλ. Σχήμα):

παγκόσμια left_spinVelocity παγκόσμια right_spinVelocity

παγκόσμιο forwardVelocity

παγκόσμια καθυστερημένη ταχύτητα

left_spinVelocity = 2;

right_spinVelocity = -2;

forwardVelocity = 3;

backwardVelocity = -3;

Σημείωση: όλες οι ταχύτητες είναι σε rad/s

Τώρα που ορίζονται οι καθολικές μεταβλητές, ας προγραμματίσουμε τα κουμπιά κίνησης.

Για το κουμπί προώθησης:

λειτουργία pushbutton4_Callback (hObject, eventdata, handles) global velmsg

παγκόσμιο ρομπότ

παγκόσμιο teleop_topic_name

παγκόσμιο forwardVelocity

velmsg. Angular. Z = 0;

velmsg. Linear. X = forwardVelocity;

αποστολή (ρομπότ, velmsg)

latchpub = rospublisher (teleop_topic_name, 'IsLatching', true);

Ομοίως και για το κουμπί Backward:

λειτουργία pushbutton5_Callback (hObject, datadata, λαβές)

global velmsg

παγκόσμιο ρομπότ

παγκόσμια καθυστερημένη ταχύτητα

παγκόσμιο teleop_topic_name

velmsg. Angular. Z = 0;

velmsg. Linear. X = backwardVelocity;

αποστολή (ρομπότ, velmsg)

latchpub = rospublisher (teleop_topic_name, 'IsLatching', true);

Παρομοίως για το αριστερό κουμπί: λειτουργία pushbutton3_Callback (hObject, datadata, λαβές)

παγκόσμιο velmsgglobal ρομπότ global left_spinVelocity

παγκόσμιο teleop_topic_name

velmsg. Angular. Z = left_spinVelocity;

velmsg. Linear. X = 0;

αποστολή (ρομπότ, velmsg)

latchpub = rospublisher (teleop_topic_name, 'IsLatching', true);

Ομοίως για το κουμπί Δεξιά:

παγκόσμιο velmsgglobal ρομπότ

παγκόσμια right_spinVelocity

παγκόσμιο teleop_topic_name

velmsg. Angular. Z = right_spinVelocity;

velmsg. Linear. X = 0;

αποστολή (ρομπότ, velmsg)

latchpub = rospublisher (teleop_topic_name, 'IsLatching', true);

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

Βήμα 8: Ρύθμιση παραμέτρων δικτύου σε υπολογιστή ROS (Linux)

Ρύθμιση διαμόρφωσης δικτύου σε υπολογιστή ROS (Linux)
Ρύθμιση διαμόρφωσης δικτύου σε υπολογιστή ROS (Linux)
Ρύθμιση διαμόρφωσης δικτύου σε υπολογιστή ROS (Linux)
Ρύθμιση διαμόρφωσης δικτύου σε υπολογιστή ROS (Linux)

Θα δοκιμάσουμε τον ελεγκτή σε έναν υπολογιστή ros (Linux), ο οποίος θα απαιτήσει τη ρύθμιση της διαμόρφωσης δικτύου. Εάν εκτελείτε επίσης τον ελεγκτή σε υπολογιστή Linux, θα πρέπει επίσης να ρυθμίσετε τη διαμόρφωση δικτύου εκεί.

Διαμόρφωση δικτύου:

Ανοίξτε το παράθυρο του τερματικού σας και πληκτρολογήστε gedit.bashrc

Μόλις ανοίξει το αρχείο προσθέστε τα εξής:

#Ρομπότ διαμόρφωση μηχανήματος

εξαγωγή ROS_MASTER_URI = https:// localhost: 11311

Διεύθυνση #IP του κύριου κόμβου ROS

εξαγωγή ROS_HOSTNAME =

εξαγωγή ROS_IP =

ηχώ "ROS_HOSTNAME:" $ ROS_HOSTNAME

ηχώ "ROS_IP:" $ ROS_IP

ηχώ "ROS_MASTER_URI:" $ ROS_MASTER_URI

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

Βήμα 9: Εκτελέστε τον ελεγκτή

Εκτελέστε τον ελεγκτή
Εκτελέστε τον ελεγκτή

Θα δοκιμάσουμε τον ελεγκτή μας σε ένα bot Turtle στο Gazebo.

Για να εγκαταστήσετε το Gazebo, ανατρέξτε στη διεύθυνση

Για να εγκαταστήσετε το bot Turtle, ανατρέξτε στη διεύθυνση

Ανοίξτε το φάκελο όπου αποθηκεύσατε τα αρχεία.fig και.m στο MATLAB και πατήστε Εκτέλεση (όπως φαίνεται στην εικόνα). Αυτό θα ανοίξει το χειριστήριο στον υπολογιστή. Πριν πατήσετε τη σύνδεση, βεβαιωθείτε ότι λειτουργεί ο προσομοιωτής χελώνας bot.

Για να δοκιμάσετε την προσομοίωση TurtleBot:

Ανοίξτε το Terminal στο Ros pc και πληκτρολογήστε: $ roslaunch turtlebot_gazebo turtlebot_world.launch. Αυτό θα ανοίξει μια προσομοίωση του Turtlebot σε αυτόν τον υπολογιστή. Το όνομα θέματος του TurtleBot είναι/cmd_vel_mux/input/teleop, το οποίο έχουμε ήδη δώσει στην εφαρμογή. Πληκτρολογήστε τη διεύθυνση ros pc Ip, τη θύρα και το όνομα του θέματος στα επεξεργάσιμα κουμπιά και πατήστε το. Συνδεθείτε στο κουμπί Robot. Το bot turtle θα πρέπει να αρχίσει να κινείται όταν πατάτε Forward, Backward κ.λπ.

Για να δείτε τις γραμμικές και γωνιακές ταχύτητες:

Ανοίξτε ένα νέο τερματικό και πληκτρολογήστε την εντολή: $ rostopic echo/cmd_vel_mux/input/teleop

Και εκεί έχετε, το δικό σας ρομποτικό χειριστήριο ROS με βάση το Matlab. Αν σας άρεσε το διδακτικό μου, δώστε του μια ψηφοφορία στον Διαγωνισμό Συγγραφέων για πρώτη φορά και μοιραστείτε το με όσο το δυνατόν περισσότερα άτομα. Σας ευχαριστώ.

Συνιστάται: