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

Ένας τρόπος χρήσης μιας μονάδας αδρανειακής μέτρησης;: 6 βήματα
Ένας τρόπος χρήσης μιας μονάδας αδρανειακής μέτρησης;: 6 βήματα

Βίντεο: Ένας τρόπος χρήσης μιας μονάδας αδρανειακής μέτρησης;: 6 βήματα

Βίντεο: Ένας τρόπος χρήσης μιας μονάδας αδρανειακής μέτρησης;: 6 βήματα
Βίντεο: Νέα απειλή για τα Ελληνικά τεθωρακισμένα: Θα έχουν να αντιμετωπίσουν τον αντιαρματικό πύραυλο KARAOK 2024, Ιούλιος
Anonim
Ένας τρόπος χρήσης μιας μονάδας αδρανειακής μέτρησης
Ένας τρόπος χρήσης μιας μονάδας αδρανειακής μέτρησης

Το περιεχόμενο:

Χτίζω για διασκέδαση ένα ρομπότ που θέλω να μετακινηθεί αυτόνομα μέσα σε ένα σπίτι.

Είναι μια μακρά δουλειά και το κάνω βήμα βήμα.

Έχω ήδη δημοσιεύσει 2 οδηγίες για αυτό το θέμα:

  • ένα για την κατασκευή κωδικοποιητή τροχού
  • ένα για σύνδεση wifi

Το ρομπότ μου οδηγείται από 2 κινητήρες DC με τη βοήθεια του σπιτικού κωδικοποιητή τροχών.

Αυτή τη στιγμή βελτιώνω τον έλεγχο κίνησης και έχω περάσει λίγο χρόνο με γυροσκόπιο, επιταχυνσιόμετρο και IMU. Θα χαρώ να μοιραστώ αυτήν την εμπειρία.

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

Βήμα 1: Γιατί να χρησιμοποιήσετε μια μονάδα αδρανειακής μέτρησης;

Γιατί να χρησιμοποιήσετε μια μονάδα αδρανειακής μέτρησης
Γιατί να χρησιμοποιήσετε μια μονάδα αδρανειακής μέτρησης

Γιατί λοιπόν χρησιμοποίησα μια IMU;

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

Δοκίμασα λοιπόν 2 διαφορετικούς αισθητήρες. Αρχικά χρησιμοποιώ μαγνητόμετρο (LSM303D). Η αρχή ήταν απλή: πριν από την περιστροφή πάρτε τον βόρειο προσανατολισμό, υπολογίστε τον στόχο και ρυθμίστε την κίνηση μέχρι να επιτευχθεί ο στόχος. Aταν λίγο καλύτερα από ό, τι με τον κωδικοποιητή αλλά με υπερβολική διασπορά. Μετά από αυτό προσπάθησα να χρησιμοποιήσω ένα γυροσκόπιο (L3GD20). Η αρχή ήταν μόνο η ενσωμάτωση της ταχύτητας περιστροφής που παρέχει ο αισθητήρας για τον υπολογισμό της περιστροφής. Και λειτούργησε μια χαρά. Wasμουν σε θέση να ελέγξω την περιστροφή σε +- 1 βαθμό.

Ωστόσο, ήμουν περίεργος να δοκιμάσω κάποια IMU. Επιλέγω ένα στοιχείο BNO055. Πέρασα λίγο χρόνο για να κατανοήσω και να δοκιμάσω αυτό το IMU. Στο τέλος αποφάσισα να επιλέξω αυτόν τον αισθητήρα για τους εξής λόγους

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

Βήμα 2: Πώς να χρησιμοποιήσετε το BNO055 για 2D Localization;

Πώς να χρησιμοποιήσετε το BNO055 για 2D Localization
Πώς να χρησιμοποιήσετε το BNO055 για 2D Localization

Το BNO055 IMU είναι ένας έξυπνος αισθητήρας Bosch 9 αξόνων που θα μπορούσε να παρέχει απόλυτο προσανατολισμό.

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

Νομίζω ότι θα ήταν χρήσιμο να μοιραστώ αυτήν την εμπειρία.

Πρώτα χρησιμοποίησα τη βιβλιοθήκη Adafruit που παρέχει ένα καλό εργαλείο για τη βαθμονόμηση και την ανακάλυψη του αισθητήρα.

Στο τέλος και μετά από πολλές δοκιμές αποφάσισα

  • χρησιμοποιήστε τη βιβλιοθήκη Adafruit μόνο για εξοικονόμηση βαθμονόμησης
  • χρησιμοποιήστε 3 από όλες τις πιθανές λειτουργίες του BNO055 (NDOF, IMU, Compss)
  • αφιερώστε ένα Arduino Nano για να υπολογίσετε τον εντοπισμό με βάση τις μετρήσεις BNO055

Βήμα 3: Hardware Point of Vue

Hardware Point of Vue
Hardware Point of Vue
Hardware Point of Vue
Hardware Point of Vue
Hardware Point of Vue
Hardware Point of Vue

Το BNO055 είναι ένα συστατικό I2C. Χρειάζεται λοιπόν τροφοδοτικό, SDA και SCL για να επικοινωνήσει.

Απλώς προσέξτε την τάση Vdd ανάλογα με το προϊόν που αγοράσατε. Το τσιπ Bosch λειτουργεί στην περιοχή: 2,4V έως 3,6V και μπορείτε να βρείτε εξαρτήματα 3,3v και 5v.

Δεν υπάρχουν δυσκολίες για τη σύνδεση του Nano και του BNO055.

  • Το BNO055 τροφοδοτείται από το Nano
  • Τα SDA & SCL συνδέονται με αντιστάσεις έλξης 2 x 2k.
  • 3 LED συνδεδεμένα στο Nano για διάγνωση (με αντιστάσεις)
  • 2 συνδετήρες που χρησιμοποιούνται για τον καθορισμό της λειτουργίας μετά την εκκίνηση
  • 1 σύνδεσμος προς το BNO (Gnd, Vdd, Sda, Scl, Int)
  • 1 συνδετήρας προς το Robot/Mega (+9V, Gnd, sda, Scl, Pin11, Pin12)

Λίγη συγκόλληση και αυτό είναι όλο!

Βήμα 4: Πώς λειτουργεί;

Πώς λειτουργεί ?
Πώς λειτουργεί ?

Από σημείο επικοινωνίας vue:

  • Το Nano είναι ο κύριος δίαυλος I2C
  • Το Robot/Mega και το BNO055 είναι σκλάβοι του I2C
  • Το Nano διαβάζει μόνιμα τους καταχωρητές BNO055
  • Το Robot/Mega ανεβάζει ένα αριθμητικό σήμα για να ζητήσει τη λέξη από το Nano

Από το σημείο υπολογισμού του vue: Το Nano σε συνδυασμό με το BNO055 αποδίδει

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

Από λειτουργικό σημείο vue: The Nano:

  • διαχειρίζεται τη βαθμονόμηση BNO055
  • διαχειρίζεται τις παραμέτρους και τις εντολές BNO055

Το υποσύστημα Nano & BNO055:

  • υπολογίστε για κάθε ρομπότ τροχούς την απόλυτη επικεφαλίδα και εντοπισμό (με συντελεστή κλίμακας)
  • υπολογίστε τη σχετική επικεφαλίδα κατά την περιστροφή του ρομπότ

Βήμα 5: Η αρχιτεκτονική και το λογισμικό

Η Αρχιτεκτονική και το Λογισμικό
Η Αρχιτεκτονική και το Λογισμικό

Το κύριο λογισμικό τρέχει σε Arduino Nano

  • Η αρχιτεκτονική βασίζεται στην επικοινωνία I2C.
  • Επέλεξα να αφιερώσω ένα Nano λόγω του γεγονότος ότι το Atmega που τρέχει το ρομπότ ήταν μάλλον ήδη φορτωμένο και αυτή η αρχιτεκτονική διευκολύνει την επαναχρησιμοποίηση αλλού.
  • Το Nano διαβάζει τα μητρώα BNO055, υπολογίζει και αποθηκεύει την επικεφαλίδα και τον εντοπισμό στα δικά του μητρώα.
  • Το Arduino Atmega που εκτελεί τον κώδικα ρομπότ, στέλνει πληροφορίες κωδικοποίησης τροχών στο Nano και διαβάζει τις επικεφαλίδες και τον εντοπισμό μέσα στα μητρώα Nano.

Ο κωδικός υπο -θέματος (Nano) είναι διαθέσιμος εδώ στο GitHub

Το εργαλείο βαθμονόμησης Adafruit εάν εδώ στο GitHub (η βαθμονόμηση θα αποθηκευτεί στο eeproom)

Βήμα 6: Τι έμαθα;

Σχετικά με το I2C

Πρώτα προσπάθησα να έχω 2 κύριους (Arduino) και 1 slave (αισθητήρα) στον ίδιο δίαυλο, αλλά στο τέλος είναι δυνατό και ευκολότερο να ορίσω μόνο το Nano ως κύριο και να χρησιμοποιήσω τη σύνδεση GPIO μεταξύ των 2 Arduinos για να "ζητήσω το διακριτικό" Το

Όσον αφορά το BNO055 για 2D προσανατολισμό

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

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

Συνιστάται: