socialgekon.com
  • Κύριος
  • Άτομα Και Ομάδες
  • Πίσω Μέρος
  • Κυνήγι
  • Κατανεμημένες Ομάδες
Πίσω Μέρος

Εισαγωγή στο λειτουργικό σύστημα ρομπότ: Το απόλυτο πλαίσιο εφαρμογής ρομπότ

ο Λειτουργικό σύστημα ρομπότ (ROS) δεν είναι ένα πραγματικό λειτουργικό σύστημα, αλλά ένα πλαίσιο και ένα σύνολο εργαλείων που παρέχουν λειτουργικότητα ενός λειτουργικού συστήματος σε ένα ετερογενές σύμπλεγμα υπολογιστών. Η χρησιμότητά του δεν περιορίζεται στα ρομπότ, αλλά η πλειονότητα των παρεχόμενων εργαλείων επικεντρώνεται στην εργασία με περιφερειακό υλικό.

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

Γιατί να χρησιμοποιήσω το Robot OS;

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



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

Οι κύριοι τρόποι δημιουργίας του δικτύου είναι η παροχή απαιτούμενων υπηρεσιών ή ο καθορισμός συνδέσεων εκδότη / συνδρομητή με άλλους κόμβους. Και οι δύο μέθοδοι επικοινωνούν μέσω καθορισμένων τύπων μηνυμάτων. Ορισμένοι τύποι παρέχονται από τα βασικά πακέτα, αλλά οι τύποι μηνυμάτων μπορούν να καθοριστούν από μεμονωμένα πακέτα.

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

  • Αντικαταστήστε τα εξαρτήματα με παρόμοιες διεπαφές εν κινήσει, αφαιρώντας την ανάγκη διακοπής του συστήματος για διάφορες αλλαγές

  • Πολλαπλές εξόδους πολλαπλών συστατικών σε μία είσοδο για άλλο συστατικό, επιτρέποντας παράλληλη επίλυση διαφόρων προβλημάτων

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

  • Δημιουργήστε κόμβους μέσω δικτύου συσκευών, χωρίς να ανησυχείτε για το πού εκτελείται ο κώδικας και να εφαρμόζετε συστήματα επικοινωνίας Interprocess (IPC) και κλήσεων απομακρυσμένης διαδικασίας (RPC)

  • Συνδεθείτε απευθείας σε τροφοδοσίες κατ 'απαίτηση από απομακρυσμένο υλικό χωρίς να γράψετε επιπλέον κώδικα, χρησιμοποιώντας τα δύο προηγούμενα σημεία

Σκοπεύουμε να δείξουμε πόσο χρήσιμο είναι αυτό με την επαναληπτική ανάπτυξη μιας απλής λύσης. Υπάρχουν πολλά βασικά πλεονεκτήματα σε σύγκριση με άλλες προσεγγίσεις. Το ROS διαθέτει υποστήριξη πολλαπλών πλατφορμών και επιτρέπει συνδέσεις μεταξύ διεργασιών σε πολλές συσκευές μέσω συνδέσεων peer-to-peer που αντιμετωπίζονται πίσω από τη σκηνή. Ο σχεδιασμός επιτρέπει υποστήριξη για οποιαδήποτε γλώσσα τυλίγοντας τις τάξεις επικοινωνίας C ++ ή χειροκίνητα αναπτύσσοντας τάξεις για τη διεπαφή γλώσσας.

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

Εναλλακτικές προσεγγίσεις όπως MRPT , CARMEN , LCM , Παίχτης , Microsoft RDS και άλλοι παρέχουν μερικά από αυτά τα χαρακτηριστικά, αλλά όχι όλα. Τις περισσότερες φορές, τα μειονεκτήματα του σχεδιασμού είναι περιορισμοί υποστήριξης γλώσσας, μη βελτιστοποιημένη επικοινωνία μεταξύ διεργασιών ή έλλειψη υποστήριξης για διάφορες συσκευές που είναι αναμφισβήτητα το πιο δύσκολο πρόβλημα να επιλυθεί.

Τι πρόκειται να οικοδομήσουμε;

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

Πρώτα απ 'όλα, θα κάνουμε ένα απλό πρόγραμμα να συνδεθεί σε μια απλή προσομοίωση, για να δείξουμε βασικές αρχές του ROS. Θα συνδέσουμε ένα gamepad σε έναν υπολογιστή και θα προσπαθήσουμε να σχεδιάσουμε ένα καλό σχήμα ελέγχου για τη μετατροπή της εισόδου gamepad σε σήματα ελέγχου για ένα ρομπότ.

Οι κύριες γλώσσες για τη σύνταξη κωδικού ROS είναι C ++ και Python, ενώ το C ++ προτιμάται λόγω της καλύτερης απόδοσης. Θα εξηγήσουμε τα παραδείγματα μας στο Πύθων λόγω λιγότερης πλάκας boiler στον κωδικό και δεν υπάρχει ανάγκη για ρητή κατασκευή.

Εγκατάσταση και διαμόρφωση

Οι εκδόσεις ROS αναφέρονται με το όνομα. Από αυτήν την ημερομηνία, η τελευταία έκδοση είναι Jade Turtle και την τελευταία έκδοση LTS Ιγκλού ιγκλού . Η μετάβαση για την έκδοση LTS είναι προτιμότερη και η συμβατότητα προς τα πίσω δεν είναι εγγυημένη στο ROS, επομένως όλα τα παραδείγματα θα γραφτούν για Ινδικό .

Το ROS είναι διαθέσιμο σε διάφορες πλατφόρμες * NIX. Η επίσημα υποστηριζόμενη έκδοση είναι στο Ubuntu. Οι εκδόσεις OS X, Arch Linux, Debian, Raspbian και Android υποστηρίζονται από την κοινότητα.

Θα περάσουμε από τη διαδικασία εγκατάστασης του Ubuntu 14.04 στην επιφάνεια εργασίας. Οι διαδικασίες για όλες τις υποστηριζόμενες εκδόσεις και πλατφόρμες είναι διαθέσιμες στον επίσημο δικτυακός τόπος . Διατίθενται επίσης εικονικές μηχανές με εγκατεστημένο το ROS.

Η εγκατάσταση εξαρτάται από την πλατφόρμα (και οι περισσότερες πλατφόρμες διαθέτουν πακέτα), αλλά η διαμόρφωση του χώρου εργασίας είναι η ίδια για όλες τις πλατφόρμες.

Εγκατάσταση στο Ubuntu

Η ROS παρέχει τα δικά της αποθετήρια. Το πρώτο βήμα είναι να τα προσθέσετε.

sudo sh -c 'echo 'deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main' > /etc/apt/sources.list.d/ros-latest.list' sudo apt-key adv --keyserver hkp://pool.sks-keyservers.net --recv-key 0xB01FA116 sudo apt-get update

Μετά από αυτό θα έχετε όλα τα φιλοξενούμενα πακέτα για όλες τις εκδόσεις ROS διαθέσιμες για την έκδοση Ubuntu. Για παράδειγμα, το Ubuntu 14.04 υποστηρίζει indigo και jade.

Η εγκατάσταση των βασικών πακέτων στην επιφάνεια εργασίας έχει μία από τις τρεις επιλογές:

  • sudo apt-get install ros-indigo-ros-base για μια ελάχιστη εγκατάσταση

  • sudo apt-get install ros-indigo-desktop για τα βασικά πρόσθετα εργαλεία GUI

  • sudo apt-get install ros-indigo-desktop-full για να έχετε όλα τα επίσημα χαρακτηριστικά, συμπεριλαμβανομένων διαφόρων προσομοιωτών και βιβλιοθηκών για πλοήγηση και αντίληψη

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

sudo apt-get install ros-indigo-

Οι κάτω παύλες αντικαθίστανται από παύλες στο τελικό όνομα, οπότε stage_ros θα είναι στο πακέτο ros-indigo-stage-ros.

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

sudo rosdep init rosdep update

Το ROS έχει πολλές μεταβλητές περιβάλλοντος που χρησιμοποιούνται από τα εργαλεία του. Με την προεπιλεγμένη εγκατάσταση, το σενάριο bash για την αρχικοποίησή τους βρίσκεται στο /opt/ros/indigo/setup.bash. Οι μεταβλητές πρέπει να προετοιμάζονται σε κάθε συνεδρία bash, οπότε η καλύτερη λύση είναι να τις προσθέσετε στο ~/.bashrc.

echo 'source /opt/ros/indigo/setup.bash' >> ~/.bashrc source ~/.bashrc

Ορισμένα πακέτα εγκαθιστούν εξωτερικές εξαρτήσεις μέσω rosinstall, το οποίο είναι διαθέσιμο ως πακέτο και εγκαθίσταται μέσω sudo apt-get install python-rosinstall.

Αυτό είναι το τέλος της εγκατάστασης στο Ubuntu. Αυτό που ακολουθεί είναι μια σύντομη εισαγωγή στην εγκατάσταση χώρων εργασίας.

Διαμόρφωση

Από τότε Γκρόβι Γκαλαπάγκος Η διαχείριση των χώρων εργασίας ROS γίνεται μέσω catkin. Πρέπει να ορίσουμε έναν κατάλογο για όλα τα πακέτα που φιλοξενούμε. Μέσα στον κατάλογο δημιουργούμε ένα src φάκελο και κλήση catkin_init_workspace μορφή μέσα σε αυτό. Αυτό θα δημιουργήσει διάφορους συμβολικούς συνδέσμους με την τρέχουσα έκδοση ROS. Το επόμενο βήμα είναι να προσθέσετε αυτόν τον χώρο εργασίας και σε μεταβλητές περιβάλλοντος.

Για να εκτελέσετε αυτήν τη διαμόρφωση ολόκληρου του χώρου εργασίας, επιλέξτε έναν κενό κατάλογο και εκτελέστε τις ακόλουθες εντολές:

mkdir src cd src catkin_init_workspace cd .. catkin_make echo 'source $(pwd)/devel/setup.bash' >> ~/.bashrc source ~/.bashrc

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

Εξοικείωση με τα εργαλεία

Η δημιουργία οποιουδήποτε κώδικα είναι ένα μεγάλο άλμα. Ας εξοικειωθούμε πρώτα με μερικά από τα συστήματα που λειτουργούν πίσω από τη σκηνή. Το πρώτο μας βήμα θα είναι η εκτέλεση του βασικού GUI και η παρακολούθηση των μηνυμάτων που δημιουργεί.

Για να εκτελέσετε οτιδήποτε στο ROS, πρέπει να ξεκινήσει μια βασική διαδικασία. Είναι τόσο εύκολο όσο το άνοιγμα ενός νέου παραθύρου τερματικού και η πληκτρολόγηση:

roscore

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

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

rqt

Μετά την εκτέλεση roscore, μπορούμε να ξεκινήσουμε το κύριο εργαλείο GUI για ROS: rqt. Αυτό που βλέπουμε είναι πολύ συντριπτικό - ένα κενό παράθυρο. rqt φιλοξενεί μια μεγάλη ποικιλία προσθηκών που μπορούν να διαμορφωθούν σε οποιαδήποτε οπτική διαμόρφωση και σε οποιονδήποτε αριθμό προκαθορισμένων προβολών.

Στιγμιότυπο οθόνης ενός κενού παραθύρου GUI με τίτλο

Για αρχή, ας τρέξουμε το Σύστημα διεύθυνσης ρομπότ plugin, επιλέγοντας το σε Plugins > Robot Tools > Robot Steering. Αυτό που παίρνουμε είναι δύο ρυθμιστικά, που αντιπροσωπεύουν τη γραμμική και περιστροφική κίνηση που θέλουμε να έχει το ρομπότ μας. Στην κορυφή της προσθήκης βλέπουμε ένα πλαίσιο κειμένου με /cmd_vel μέσα σε αυτό. Μπορούμε να το μετονομάσουμε σε οτιδήποτε θέλουμε. Αντιπροσωπεύει το όνομα του θέματος στο οποίο δημοσιεύεται το τιμόνι. Τα εργαλεία τερματικού είναι το καλύτερο μέρος για να δείτε τι συμβαίνει στο παρασκήνιο.

Στιγμιότυπο οθόνης που δείχνει το ίδιο παράθυρο με το προηγούμενο, αλλά με μια διεπαφή Robot Steering --- με εικονίδια D, επαναφόρτωση, βοήθεια, ελαχιστοποίηση, κύκλο και Χ --- μέσα σε αυτό. Η πρώτη γραμμή έχει ένα πλαίσιο κειμένου με

Εργαλεία τερματικού

Το ROS διαθέτει αρκετά ισχυρά εργαλεία για την επιθεώρηση του τι συμβαίνει στο σύστημα. Το πρώτο εργαλείο που θα παρουσιάσουμε είναι rostopic. Μας επιτρέπει να ελέγξουμε θέματα στα οποία οι κόμβοι μπορούν να εγγραφούν και να δημοσιεύσουν. Τρέξιμο rostopic list θα αποδώσει:

/cmd_vel /rosout /rosout_agg

Τα τελευταία 2 θέματα εκτελούνται πάντα και σχετίζονται με κεντρικά συστήματα ROS. Το /cmd_vel Το θέμα δημοσιεύεται από το τιμόνι μας. Η μετονομασία του θέματος στο τιμόνι θα το μετονομάσει και εδώ. Τώρα, μας ενδιαφέρει το τι συμβαίνει μέσα στο θέμα. Τρέξιμο rostopic echo /cmd_vel δεν θα μας δείξει τίποτα (εκτός κι αν παίζατε με τα ρυθμιστικά). Η διαδικασία εκτελείται μέχρι να την ακυρώσουμε. Ας μετακινήσουμε τώρα το κατακόρυφο ρυθμιστικό στα 20 m / s. Κοιτάζοντας την ηχώ, μπορούμε να δούμε τα ακόλουθα επαναλαμβανόμενα ξανά και ξανά:

linear: x: 0.2 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 0.0

Πόσο συχνά ανεβάζει το μήνυμα αυτό; rostopic hz /cmd_vel λέει με μέσο ρυθμό 10 Hz. Λοιπόν, πόσα θέματα όπως αυτό μπορώ να τρέξω μέσω της αργής σύνδεσης Wi-Fi; rostopic bw /cmd_vel ανιχνεύει κατά μέσο όρο 480 B / s.

Τώρα όλα είναι καλά και καλά, αλλά μιλήσαμε για τους τύπους μηνυμάτων. Αυτά τα δεδομένα είναι καλά για έναν άνθρωπο, αλλά μια εφαρμογή θα χρειαστεί τα ανεπεξέργαστα δεδομένα και θα πρέπει να γνωρίζει τον τύπο μηνύματος, ώστε να μπορεί να ερμηνεύσει τα δεδομένα. Ο τύπος μπορεί να προσδιοριστεί με rostopic type /cmd_vel, λέγοντας ότι είναι geometry_msgs/Twist. Όλα τα τερματικά εργαλεία ROS που κλήθηκαν χωρίς ορίσματα επιστρέφουν ένα τυπικό μήνυμα βοήθειας.

Το ROS Wiki είναι αρκετά καλό για να πραγματοποιήσει μια αναζήτηση στον ιστό για αυτήν τη συμβολοσειρά που οδηγεί σε μια εξήγηση του Wiki για το τι περιέχει και πώς είναι δομημένη. Αλλά δεν χρειάζεται να βασιστούμε σε αυτό. rosmsg είναι το γενικό εργαλείο για τύπους μηνυμάτων. Τρέξιμο rosmsg show geometry_msgs/Twist θα επιστρέψει:

geometry_msgs/Vector3 linear float64 x float64 y float64 z geometry_msgs/Vector3 angular float64 x float64 y float64 z

Το μήνυμα αποτελείται από δύο διανύσματα 3D, που αντιπροσωπεύουν γραμμική και γωνιακή ταχύτητα σε 3D χώρο.

Εάν θέλουμε σε ποια θέματα είναι συνδεδεμένος ένας κόμβος, rosnode info θα μας δώσει λεπτομερή δεδομένα για τον κόμβο. Τα εργαλεία rostopic, rosmsg και rosnode είναι τα κύρια εργαλεία για τον έλεγχο της λειτουργικότητας του ROS. Το ROS διαθέτει πολύ περισσότερα εργαλεία GUI και τερματικών, αλλά αυτά δεν εμπίπτουν στο πεδίο εφαρμογής μας για αυτήν την εισαγωγή.

Τα κύρια εργαλεία για την εκτέλεση κόμβων ROS είναι rusrun και roslaunch. rosrun μπορεί να εκτελέσει κόμβους μέσω rosrun , και roslaunch εκτελεί κόμβους βασισμένους σε αρχεία εκκίνησης, με τα οποία θα εξοικειωθούμε σε μικρό βαθμό, καθώς είναι το πιο περίπλοκο στοιχείο του αυτοματισμού ROS.

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

Δημιουργία τηλεχειρισμού Gamepad

Ο πρώτος μας στόχος είναι να μιμηθούμε τη λειτουργικότητα του Robot Steering δημιουργώντας έναν κόμβο που δημοσιεύει geometry_msgs/Twist δεδομένα σε /cmd_vel με βάση την είσοδο gamepad. Η πρώτη μας στάση είναι η joy πακέτο.

Το joy Πακέτο

Το joy Το πακέτο παρέχει γενικά προγράμματα οδήγησης ROS για χειριστήρια και gamepads. Δεν περιλαμβάνεται στην προεπιλεγμένη εγκατάσταση, επομένως πρέπει να εγκατασταθεί μέσω:

sudo apt-get install ros-indigo-joy

Μετά την εγκατάσταση, μπορούμε να εκτελέσουμε rosrun joy joy_node. Αυτό θα μας συνδέσει με το προεπιλεγμένο χειριστήριο ή το gamepad. Τρέξιμο rostopic list μας δείχνει ότι έχουμε ένα θέμα που ονομάζεται /joy. Ακούγοντας το μέσω rostopic echo μας δείχνει μηνύματα με την ακόλουθη μορφή (σημειώστε ότι πρέπει να αλληλεπιδράσετε με το gamepad ή το χειριστήριο για τη δημοσίευση μηνυμάτων).

header: seq: 4156 stamp: secs: 1450707466 nsecs: 204517084 frame_id: '' axes: [0.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0] buttons: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

Μπορείτε να αγνοήσετε τις κεφαλίδες προς το παρόν. Εκτός από αυτό, έχουμε axes και buttons, εξηγώντας όμορφα τι αντιπροσωπεύουν. Η κίνηση των αξόνων και τα πλήκτρα στον ελεγκτή θα έχουν ως αποτέλεσμα την αλλαγή αυτών των αριθμών. Χρησιμοποιώντας τα εργαλεία μας, μπορούμε να προσδιορίσουμε ότι ο τύπος μηνύματος είναι sensor_msgs/Joy και η μορφή είναι:

std_msgs/Header header uint32 seq time stamp string frame_id float32[] axes int32[] buttons

Δημιουργία της Τηλελειτουργίας μας

Το πρώτο βήμα για τη σύνταξη κώδικα είναι η δημιουργία ενός πακέτου. Εντός του src φάκελο του χώρου εργασίας, εκτελέστε:

catkin_create_pkg toptal_tutorial rospy joy geometry_msgs sensor_msgs

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

Έχουμε τώρα ένα toptal_tutorial ντοσιέ. Μέσα στο φάκελο, δημιουργήστε ένα scripts φάκελο που θα φιλοξενήσει όλα τα σενάρια Python.

Ας δημιουργήσουμε ένα αρχείο με την ονομασία teleop.py και μέσα σε αυτό θα ορίσουμε:

#!/usr/bin/env python import rospy from sensor_msgs.msg import Joy def joy_callback(data): print data def main(): rospy.init_node('teleop') rospy.Subscriber('joy', Joy, joy_callback) while not rospy.is_shutdown(): pass if __name__ == '__main__': main()

Θα πρέπει επίσης να ορίσουμε chmod +x teleop.py έτσι το σενάριο γίνεται εκτελέσιμο. Τρέξιμο rosrun joy joy_node σε ένα τερματικό και rosrun toptal_tutorial teleop.py σε άλλο θα έχει ως αποτέλεσμα την έξοδο τερματικού teleop.py με μηνύματα Joy.

Ας δούμε τι κάνει ο κώδικας.

Πρώτον, εισάγουμε rospy, η οποία φιλοξενεί τη βιβλιοθήκη για αλληλεπίδραση με το πλαίσιο ROS. Κάθε πακέτο που καθορίζει μηνύματα έχει ένα msg υπο συσκευασία με ορισμούς μηνυμάτων σε αυτό. Εισάγουμε Joy για να χειριστείτε την είσοδο. Δεν χρειάζεται να εισαγάγετε ενσωματωμένους τύπους μηνυμάτων (όπως Header από std_msgs.msg που βρίσκονται στο μήνυμα Joy) εκτός εάν θέλουμε να τους αναφέρουμε ρητά.

Το πρώτο μας βήμα είναι η προετοιμασία ενός κόμβου με συγκεκριμένο όνομα (σε αυτήν την περίπτωση, το ονομάζουμε «teleop»). Μετά από αυτό δημιουργούμε έναν συνδρομητή που εγγράφεται στο θέμα «χαρά» του τύπου sensor_msgs.msg.Joy και χειρίζεται κάθε μήνυμα καλώντας το joy_callback λειτουργία. Οι επιστροφές κλήσης λαμβάνουν μία παράμετρο, τα δεδομένα από το μήνυμα. Η πρόσβαση σε μέλη των δεδομένων είναι απλή. Εάν θέλαμε να εκτυπώσουμε την κατάσταση του πρώτου άξονα, αν θυμηθούμε τον τύπο μηνύματος, θα καλούσαμε print data.axes[0] και θα είναι float. Ο βρόχος στο τέλος βγαίνει μέχρι να κλείσει το ROS.

Το επόμενο βήμα μας θα ήταν να χειριστούμε τα δεδομένα μας με κάποιο τρόπο. Πρέπει να δημιουργήσουμε ένα μήνυμα Twist που αλλάζει ανάλογα με την είσοδο και μετά θα το δημοσιεύσουμε στο cmd_vel θέμα.

#!/usr/bin/env python import rospy from sensor_msgs.msg import Joy from geometry_msgs.msg import Twist # new from functools import partial # new def joy_callback(pub, data): # modified cmd_vel = Twist() # new cmd_vel.linear.x = data.axes[1] # new cmd_vel.angular.z = data.axes[0] # new pub.publish(cmd_vel) # new def main(): rospy.init_node('teleop') pub = rospy.Publisher('cmd_vel', Twist, queue_size=1000) # new rospy.Subscriber('joy', Joy, partial(joy_callback, pub)) # modified while not rospy.is_shutdown(): pass if __name__ == '__main__': main()

Πρώτα, προσθέτουμε το Twist και προσθέτουμε υποστήριξη για δεσμευτικά ορίσματα συνάρτησης μέσω functools.partial. Δημιουργούμε έναν εκδότη, pub, που δημοσιεύει στο cmd_vel ένα μήνυμα τύπου Twist. Δεσμεύουμε αυτόν τον εκδότη στην επιστροφή κλήσης και το κάνουμε να δημοσιεύσει ένα μήνυμα Twist σε κάθε είσοδο με τις ταχύτητες να αντιπροσωπεύονται από τους δύο πρώτους άξονες. Αυτός ο κωδικός κάνει ό, τι περιμένουμε και μπορούμε να δούμε την προκύπτουσα έξοδο μέσω rostopic echo /cmd_vel.

Έχουμε ακόμη ένα ζήτημα. Το /joy Το θέμα μπορεί να δημοσιεύσει με εξαιρετικές τιμές. Εάν παρακολουθούμε το rostopic hz /cmd_vel και μετακινήστε το αναλογικό ραβδί σε κύκλους, μπορούμε να δούμε μεγάλους αριθμούς μηνυμάτων. Αυτό όχι μόνο οδηγεί σε μεγάλο αριθμό επικοινωνιών, αλλά οι διαδικασίες που λαμβάνουν αυτά τα μηνύματα πρέπει να επεξεργάζονται κάθε ένα από αυτά. Δεν υπάρχει ανάγκη δημοσίευσης αυτών των δεδομένων τόσο συχνά, και καλύτερα να δημοσιεύουμε με σταθερό ρυθμό 10 Hz. Μπορούμε να το επιτύχουμε με τον ακόλουθο κώδικα.

#!/usr/bin/env python import rospy from sensor_msgs.msg import Joy from geometry_msgs.msg import Twist from functools import partial def joy_callback(cmd_vel, data): # modified cmd_vel.linear.x = data.axes[1] cmd_vel.angular.z = data.axes[0] # moved pub.publish(cmd_vel) to main loop def main(): rospy.init_node('teleop') cmd_vel = Twist() # new pub = rospy.Publisher('cmd_vel', Twist, queue_size=1000) rospy.Subscriber('joy', Joy, partial(joy_callback, cmd_vel)) # modified rate = rospy.Rate(10) # new while not rospy.is_shutdown(): pub.publish(cmd_vel) # new rate.sleep() # new if __name__ == '__main__': main()

Τροποποιήσαμε την επιστροφή κλήσης για να λάβουμε το μεταβλητό Twist αντικείμενο και να το τροποποιήσετε εντός του βρόχου. Το sleep συνάρτηση από rospy.Rate διατηρεί μια σταθερή συχνότητα εξόδου.

Ο τελικός κωδικός θα έχει ως αποτέλεσμα το /cmd_vel θέμα λήψη εντολών ταχύτητας στα 10 Hz, μιμείται την έξοδο του Σύστημα διεύθυνσης ρομπότ rqt συνδέω.

Εκτέλεση προσομοιωμένου συστήματος

Προσομοίωση του κόσμου

Ο πρώτος μας στόχος είναι να δημιουργήσουμε ένα περιβάλλον στο οποίο μπορούμε να προσομοιώσουμε ένα σενάριο που θέλουμε να επιτύχουμε. Ο κόμβος stageros εντός του stage_ros Το πακέτο μας επιτρέπει να τρέξουμε ένα ρομπότ σε ένα 2D στάδιο που ορίζεται μέσω μιας εικόνας. Υπάρχει μια ολόκληρη σύνταξη, που περιγράφεται στο stage_ros πακέτο για παγκόσμια αρχεία και πώς να τα δημιουργήσετε. Είναι αρκετά απλό, αλλά εκτός του πεδίου εφαρμογής μας. Ευτυχώς, το πακέτο συνοδεύεται από αρκετούς demo world. Αρχικά, ας πάμε στον κατάλογο αρχείων εκτελώντας:

roscd stage_ros cd world

Μέσα στο φάκελο υπάρχουν πολλά αρχεία. Ας τρέξουμε ένα.

rosrun stage_ros stageros willow-erratic.world

Αυτό δημιούργησε διάφορα θέματα. Η έννοια του καθενός τεκμηριώνεται επίσης με το πακέτο. Το σημαντικό μέρος είναι ότι έχει cmd_vel.

Στιγμιότυπο οθόνης ενός παραθύρου με τίτλο Stage: willow-erratic.world. Η ετικέτα κατάστασης διαβάζει,

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

Ρύθμιση του συστήματός μας μέσω αρχείων εκκίνησης

ας δημιουργήσουμε ένα launch φάκελο μέσα στο πακέτο μας, και μέσα σε αυτό δημιουργήστε ένα αρχείο που ονομάζεται teleop.launch. Η τελική δομή φακέλων πρέπει να έχει την εξής μορφή:

toptal_tutorial/ ├── CMakeLists.txt ├── launch │ └── teleop.launch ├── package.xml ├── scripts │ └── teleop.py └── src

Εντός του teleop.launch αρχείο θα καθορίσουμε ένα σύνολο κόμβων και τις διασυνδέσεις τους.

robot_

Ο νέος κόσμος αποτελείται από τέσσερα ρομπότ και κάθε θέμα έχει πρόθεμα robot_0/cmd_vel. Έτσι, ο αριθμός ρομπότ 0 έχει ένα θέμα εντολής ταχύτητας που ονομάζεται robot_0. Γι 'αυτό βάζουμε τον έλεγχό μας σε ένα χώρο ονομάτων που ονομάζεται roscore, για να προσαρμόσουμε τα ονόματά τους στη νέα φόρμα. Με αυτήν την έννοια, μπορείτε να σκεφτείτε τα ονόματα θεμάτων ως φακέλους σε ένα σύστημα αρχείων.

Διάγραμμα με δύο ενότητες, προσομοιωμένο κόσμο και / robot_0. Το τελευταίο έχει κουτιά και φυσαλίδες ξεκινώντας από το / robot_0 /. Ο πρώτος έχει μια φούσκα με ετικέτα / προσομοιωμένο κόσμο συνδεδεμένο με τον δεύτερο

Για να εκτελέσετε αρχεία εκκίνησης, όχι roscore απατείται. Κατά μία έννοια, roscore είναι απλώς μια ειδική περίπτωση ενός αρχείου εκκίνησης που δεν κάνει τίποτα. Εάν a roslaunch toptal_tutorial teleop.launch λείπει, μόνο το πρώτο launchfile που θα ξεκινήσει θα τρέχει έναν πυρήνα, ενώ τα υπόλοιπα θα συνδεθούν σε αυτό. Τώρα, εκτελούμε την κυκλοφορία με:

/robot_/base_pose_ground_truth /robot_/base_scan_0 /robot_/base_scan_1 /robot_/camera_info_0 /robot_/camera_info_1 /robot_/cmd_vel /robot_/depth_0 /robot_/depth_1 /robot_/image_0 /robot_/image_1 /robot_/odom

Εάν όλα είναι σωστά, αυτό θα οδηγήσει σε προσομοιωτή με 4 ρομπότ, ένα από τα οποία ελέγχεται με το gamepad ή το χειριστήριο. Αυτός ο κόσμος έχει πολύ περισσότερα από το προηγούμενο. Καθένα από τα τέσσερα ρομπότ έχει:

rqt

Αντικαθιστούμε με 0, 1, 2 ή 3. Αυτό μας φέρνει στο τελευταίο μας θέμα.

Προβολή των δεδομένων μας με rqt

Δεν μπήκαμε πολύ βαθιά στο image_0, αλλά είναι το τέλειο εργαλείο για την προβολή πιο σύνθετων δεδομένων. Μπορείτε να πειραματιστείτε με όλα τα θέματα, αλλά θα επικεντρωθούμε στα image_1, depth_0, depth_1 και rqt Θέματα.

Ας ξεκινήσουμε Plugins > Visualization > Image View και αφαιρέστε τυχόν ανοιχτά πρόσθετα. Τώρα θα ανοίξουμε 4 οπτικοποιητές εικόνας (robot_0) και θα τους τοποθετήσουμε σε σχηματισμό πλέγματος 2x2. Τέλος, στην επάνω αριστερή γωνία καθεμιάς από τις προβολές, ας επιλέξουμε ένα από τα τέσσερα δηλωμένα θέματα για stage_ros/world.

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

Αυτό που παίρνουμε είναι στερεοφωνική όραση με αντίληψη βάθους, με κάμερες χαμηλής ανάλυσης. Λάβετε υπόψη ότι θα μπορούσαμε να έχουμε ακόμη και αυτό το αποτέλεσμα χωρίς το σύστημα εισόδου μας. Εάν το τρέξουμε απλώς (από τον φάκελο rosrun stage_ros stageros willow-four-erratics-multisensor.world ):

/robot_0/cmd_vel

και προσθέστε το Σύστημα διεύθυνσης ρομπότ πρόσθετο με ένα θέμα που ονομάζεται export ROS_MASTER_URI=http://:11311/, θα έχουμε τα ίδια αποτελέσματα με τα χειριστήρια να είναι ρυθμιστικά στην οθόνη.

Εφαρμογή των αποτελεσμάτων σε πραγματικό σύστημα

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

Ενώ το τελευταίο αποτέλεσμα ήταν μια προσομοίωση αυτού που θέλουμε να επιτύχουμε, το ίδιο μπορεί να επιτευχθεί με τις ακόλουθες τροποποιήσεις:

  • Εγκαταστήστε το ROS στον ενσωματωμένο υπολογιστή του ρομπότ σας
  • Δημιουργήστε ένα αρχείο εκκίνησης για τον ενσωματωμένο υπολογιστή που συνδέει το ROS με την υποκείμενη πλατφόρμα και όλους τους αισθητήρες υψηλού επιπέδου όπως κάμερες, συσκευές εύρεσης λέιζερ και άλλους. Οι απαραίτητοι κόμβοι μπορούν ήδη να υπάρχουν ή μπορούν να υλοποιηθούν δημιουργώντας έναν εκδότη / συνδρομητή στο ROS από τη μία πλευρά και ένα πρόγραμμα οδήγησης για σειριακές επικοινωνίες από την άλλη
  • Εκτελέστε το launchfile κατά την εκκίνηση
  • Στον απομακρυσμένο υπολογιστή σας προσθέστε roscore στην εκκίνηση του bash, κάνοντας τον απομακρυσμένο υπολογιστή να αναζητά rqt σε αυτό το όνομα κεντρικού υπολογιστή και τη θύρα
  • Εκκίνηση gazebo ή / και σενάρια για την παρακολούθηση και τον έλεγχο του ρομπότ

Αυτό που πραγματικά καταλήγει είναι απλώς η εξαγωγή της κατάλληλης μεταβλητής περιβάλλοντος στην απομακρυσμένη συσκευή και τα υπόλοιπα χειρίζονται τον εαυτό τους. Η εκτέλεση του ROS σε σύμπλεγμα υπολογιστών χρειάζεται μόνο ένα βήμα για κάθε υπολογιστή.

συμπέρασμα

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

Ενώ χρησιμοποιήσαμε έναν απλό προσομοιωτή, πιο περίπλοκοι προσομοιωτές όπως

|_+_|
(περιλαμβάνεται επίσης στην πλήρη έκδοση επιτραπέζιου υπολογιστή) σας επιτρέπει να δημιουργήσετε Τρισδιάστατοι κόσμοι με φυσική και πολύπλοκους αισθητήρες και μπορεί να σας δώσει μια εμπειρία με τα τελικά αποτελέσματα και το προϊόν πολύ πριν αναπτυχθεί.

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

Πρέπει να επανεξετάσουμε τη χρήση του EBITDA;

Κερδοφορία & Αποδοτικότητα

Πρέπει να επανεξετάσουμε τη χρήση του EBITDA;
Σχεδιασμός για Ανθρώπινη Συμπεριφορά: Ορισμός του Άυλου

Σχεδιασμός για Ανθρώπινη Συμπεριφορά: Ορισμός του Άυλου

Σχεδιασμός Ux

Δημοφιλείς Αναρτήσεις
Ανώτερος Μηχανικός Back-end, Ομάδα Εξόρυξης Χρεώσεων
Ανώτερος Μηχανικός Back-end, Ομάδα Εξόρυξης Χρεώσεων
Η ApeeScape συνεργάζεται με Global Guide για να προσφέρει κατ 'απαίτηση πρόσβαση στο Elite Network of Freelancers
Η ApeeScape συνεργάζεται με Global Guide για να προσφέρει κατ 'απαίτηση πρόσβαση στο Elite Network of Freelancers
Παραγωγικότητα στο δρόμο: Εργασία με πλήρη απασχόληση, ταξίδια σόλο, διασκέδαση
Παραγωγικότητα στο δρόμο: Εργασία με πλήρη απασχόληση, ταξίδια σόλο, διασκέδαση
Πώς λειτουργεί το Shazam; Αλγόριθμοι αναγνώρισης μουσικής, δακτυλικά αποτυπώματα και επεξεργασία
Πώς λειτουργεί το Shazam; Αλγόριθμοι αναγνώρισης μουσικής, δακτυλικά αποτυπώματα και επεξεργασία
Απλοποίηση της χρήσης RESTful API και ανθεκτικότητας δεδομένων σε iOS με το Mantle και το Realm
Απλοποίηση της χρήσης RESTful API και ανθεκτικότητας δεδομένων σε iOS με το Mantle και το Realm
 
Εκμάθηση κειμένου SVG: Σχολιασμός κειμένου στον Ιστό
Εκμάθηση κειμένου SVG: Σχολιασμός κειμένου στον Ιστό
Εισαγωγή στο Deep Learning Trading σε Hedge Funds
Εισαγωγή στο Deep Learning Trading σε Hedge Funds
Magento 2 Tutorial: Πώς να φτιάξετε μια πλήρη ενότητα
Magento 2 Tutorial: Πώς να φτιάξετε μια πλήρη ενότητα
Προοπτικές εμπειρογνωμόνων για την κατάσταση της εκπαίδευσης σχεδιασμού
Προοπτικές εμπειρογνωμόνων για την κατάσταση της εκπαίδευσης σχεδιασμού
Πώς να χρησιμοποιήσετε το TikTok για επιχειρήσεις ως εντελώς αρχάριος
Πώς να χρησιμοποιήσετε το TikTok για επιχειρήσεις ως εντελώς αρχάριος
Κατηγορίες
ΚινητόΤροποσ ΖωησΚύκλος Ζωής ΠροϊόντοςΠίσω ΜέροςΆτομα Και ΟμάδεςΑνάρτησηΜηχανική ΔιοίκησηΤάσειςΔιεπαφή ΙστούKpi Και Analytics

© 2023 | Ολα Τα Δικαιώματα Διατηρούνται

socialgekon.com