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

Φτιάξτε ένα ρομπότ με καθοδήγηση Lidar με το GiggleBot: 8 βήματα
Φτιάξτε ένα ρομπότ με καθοδήγηση Lidar με το GiggleBot: 8 βήματα

Βίντεο: Φτιάξτε ένα ρομπότ με καθοδήγηση Lidar με το GiggleBot: 8 βήματα

Βίντεο: Φτιάξτε ένα ρομπότ με καθοδήγηση Lidar με το GiggleBot: 8 βήματα
Βίντεο: Ρομπότ συγκόλλησης HJR-008,κατασκευαστές ρομπότ συγκόλλησης,βραχίονας ρομπότ συγκόλλησης,Κινέζος προ 2024, Νοέμβριος
Anonim
Φτιάξτε ένα ρομπότ με καθοδήγηση Lidar με το GiggleBot
Φτιάξτε ένα ρομπότ με καθοδήγηση Lidar με το GiggleBot
Φτιάξτε ένα ρομπότ με καθοδήγηση Lidar με το GiggleBot
Φτιάξτε ένα ρομπότ με καθοδήγηση Lidar με το GiggleBot
Φτιάξτε ένα ρομπότ με καθοδήγηση Lidar με το GiggleBot
Φτιάξτε ένα ρομπότ με καθοδήγηση Lidar με το GiggleBot

Σε αυτό το σεμινάριο, κάνουμε το GiggleBot να αντιμετωπίσει τις δυσκολίες ενός λαβυρίνθου.

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

Ταυτόχρονα, το GiggleBot στέλνει αυτά τα δεδομένα σε ένα απομακρυσμένο μικροσκόπιο του BBC: bit που εμφανίζει στη μήτρα 5 προς 5 των LEDs τη σχετική του θέση στα εμπόδια.

Η δουλειά σας είναι να μπορείτε να πλοηγηθείτε στο GiggleBot μόνο κοιτάζοντας αυτό που εμφανίζεται στο άλλο μικρόβιο του BBC: bit. Για τον έλεγχο του GiggleBot, χρησιμοποιούνται τα κουμπιά στο απομακρυσμένο μικρόφωνο BBC: bit.

Αυτό ακούγεται διασκεδαστικό! Ας ασχοληθούμε με αυτό, έτσι δεν είναι;

Βήμα 1: Απαιτούμενα εξαρτήματα

Απαιτούμενα εξαρτήματα
Απαιτούμενα εξαρτήματα

Θα χρειαστούμε:

  1. Ένα GiggleBot.
  2. Μπαταρία για το BBC micro: bit. Έρχεται μαζί με ένα μικροσκόπιο BBC: bit στο πακέτο του.
  3. x3 μπαταρίες AA για το GiggleBot.
  4. Καλώδιο Grove για σύνδεση του αισθητήρα απόστασης στο GiggleBot.
  5. Ένα σερβο σετ από την DexterIndustries.
  6. x3 BBC micro: bits. Ένα για το GiggleBot και ένα για τον έλεγχο του ρομπότ από μακριά.
  7. Αισθητήρας απόστασης από την DexterIndustries.

Αποκτήστε το ρομπότ GiggleBot για το μικρόφωνο του BBC: λίγο εδώ!

Βήμα 2: Συναρμολόγηση του ρομπότ

Συναρμολόγηση του ρομπότ
Συναρμολόγηση του ρομπότ
Συναρμολόγηση του ρομπότ
Συναρμολόγηση του ρομπότ

Για να κάνουμε το GiggleBot έτοιμο για προγραμματισμό, πρέπει να το συναρμολογήσουμε, αν και δεν χρειάζεται να γίνει πολύ.

Τοποθετήστε τις 3 μπαταρίες ΑΑ στο διαμέρισμα του κάτω από το GiggleBot.

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

Κατά την τοποθέτηση του βραχίονα σερβο σερβο, βεβαιωθείτε ότι ο σερβο έχει ήδη ρυθμιστεί στη θέση 80. Μπορείτε να το κάνετε αυτό καλώντας το gigglebot.set_servo (gigglebot. RIGHT, 80). Μπορείτε να διαβάσετε περισσότερα για αυτό εδώ.

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

Τέλος, συνδέστε τον αισθητήρα απόστασης με ένα καλώδιο Grove σε οποιαδήποτε από τις 2 θύρες I2C και το σερβοκινητήρα στη δεξιά θύρα που βρίσκεται στο GiggleBot - η σωστή θύρα αναφέρεται σε αυτό.

Βήμα 3: Δημιουργήστε το δικό σας λαβύρινθο - Προαιρετικό

Δημιουργήστε το δικό σας λαβύρινθο - Προαιρετικό
Δημιουργήστε το δικό σας λαβύρινθο - Προαιρετικό

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

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

Or αν δεν θέλετε καθόλου ένα κομμάτι, μπορείτε να βάλετε το GiggleBot σε μια κουζίνα ή ένα σαλόνι για παράδειγμα - αυτό θα πρέπει να είναι αρκετά καλό γιατί υπάρχουν πολλοί τοίχοι και εμπόδια που πρέπει ακόμα να αποφύγετε.

Βήμα 4: Ρύθμιση του περιβάλλοντος

Ρύθμιση του Περιβάλλοντος
Ρύθμιση του Περιβάλλοντος

Για να μπορέσετε να προγραμματίσετε το BBC micro: bit στο MicroPython, πρέπει να ρυθμίσετε έναν επεξεργαστή για αυτό (το Mu Editor) και να ορίσετε τον χρόνο εκτέλεσης του GiggleBot MicroPython ως χρόνου εκτέλεσης. Για αυτό, πρέπει να ακολουθήσετε τις οδηγίες σε αυτήν τη σελίδα. Από εκείνη τη στιγμή, χρησιμοποιείται η έκδοση v0.4.0 του χρόνου εκτέλεσης.

Βήμα 5: Προγραμματισμός του GiggleBot - Μέρος Ι

Αρχικά, ας ρυθμίσουμε το σενάριο του GiggleBot. Αυτό το σενάριο θα κάνει το GiggleBot να περιστρέφει τον σερβοκινητήρα του 160 μοίρες (80 μοίρες σε κάθε κατεύθυνση), ενώ ταυτόχρονα λαμβάνει 10 ενδείξεις από τον αισθητήρα απόστασης ανά στροφή.

Όταν είναι ενεργοποιημένο, το GiggleBot θα παραμείνει σε κατάσταση αναμονής μέχρι να λάβει μια εντολή από το τηλεχειριστήριο. Μπορεί να υπάρχουν μόνο 3 εντολές: προχωρήστε προς τα εμπρός, προς τα αριστερά ή προς τα δεξιά.

Σημείωση: Το ακόλουθο σενάριο μπορεί να έχει κενά κενά και αυτό φαίνεται να οφείλεται σε κάποιο πρόβλημα στην εμφάνιση των GitHub Gists. Κάντε κλικ στην ουσία για να μεταφερθείτε στη σελίδα του GitHub, όπου μπορείτε να αντιγράψετε-επικολλήσετε τον κώδικα.

Τηλεχειριζόμενο GiggleBot με βάση το LIDAR

από εισαγωγή gigglebot*
από distance_sensor εισαγωγή DistanceSensor
από ύπνο εισαγωγής microbit
από utime import ticks_us, sleep_us
εισαγωγή ustruct
εισαγωγή ραδιοφώνου
# σταματήστε το ρομπότ αν κινείται ήδη
να σταματήσει()
# ενεργοποίηση ραδιοφώνου
radio.on ()
# αντικείμενο αισθητήρα απόστασης
ds = DistanceSensor ()
ds.start_continuous ()
rotate_time = 0,7# μετρημένο σε δευτερόλεπτα
rotate_span = 160# μετρημένο σε μοίρες
rotate_steps = 10
overhead_compensation = 1,05# ορίζεται σε ποσοστά
time_per_step = 10 ** 6* rotate_time / (rotate_steps* overhead_compensation)
last_read_time = 0
ραντάρ = bytearray (rotate_steps)
servo_rotate_direction = 0# 0 για ανοδική πορεία (0-> 160) και 1 αλλιώς
radar_index = 0
set_servo (ΔΕΞΙΑ, 0)
ενώ Αλήθεια:
# διαβάστε από το ραντάρ
εάν ticks_us () - last_read_time> time_per_step:
# ανάγνωση από τον αισθητήρα απόστασης
ραντάρ [radar_index] = int (ds.read_range_continuous () /10)
last_read_time = ticks_us ()
εκτύπωση (radar_index)
# κάντε τη λογική για περιστροφή του σερβο από αριστερά προς τα δεξιά
εάν radar_index == rotate_steps -1και servo_rotate_direction == 0:
set_servo (ΔΕΞΙΑ, 0)
servo_rotate_direction = 1
elif radar_index == 0και servo_rotate_direction == 1:
set_servo (RIGHT, rotate_span)
servo_rotate_direction = 0
αλλού:
radar_index += 1αν servo_rotate_direction == 0else-1
# και στείλτε τις τιμές του ραντάρ
radio.send_bytes (ραντάρ)
προσπαθήστε:
# διαβάστε εντολές ρομπότ
lmotor, rmotor = ustruct.unpack ('bb', radio.receive_bytes ())
# και ενεργοποιήστε τους κινητήρες εάν υπάρχουν ληφθείσες εντολές
set_speed (lmotor, rmotor)
οδηγώ()
εκτόςTypeError:
πέρασμα

προβολή rawgigglebot_lidar_robot.py που φιλοξενείται με ❤ από το GitHub

Βήμα 6: Προγραμματισμός του τηλεχειριστηρίου - Μέρος II

Αυτό που μένει να γίνει είναι ο προγραμματισμός του 2ου μικροφώνου BBC: bit που λειτουργεί ως τηλεχειριστήριο.

Το τηλεχειριστήριο χρησιμοποιείται για να εμφανίσει στην οθόνη του 5 με 5 εικονοστοιχεία τη σχετική απόσταση από τα εμπόδια. Το πολύ, θα είναι ενεργοποιημένα 10 pixel.

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

Σημείωση: Το ακόλουθο σενάριο μπορεί να έχει κενά κενά και αυτό φαίνεται να οφείλεται σε κάποιο πρόβλημα στην εμφάνιση των GitHub Gists. Κάντε κλικ στην ουσία για να μεταφερθείτε στη σελίδα του GitHub, όπου μπορείτε να αντιγράψετε-επικολλήσετε τον κώδικα.

Τηλεχειριζόμενο GiggleBot με βάση το LIDAR - Απομακρυσμένος κώδικας

από ύπνο εισαγωγής microbit, οθόνη, κουμπί_α, κουμπί_β
εισαγωγή ustruct
εισαγωγή ραδιοφώνου
εισαγωγή μαθηματικών
radio.on ()
rotate_steps = 10
rotate_span = 160# σε μοίρες
rotate_step = rotate_span / rotate_steps
max_distance = 50# σε εκατοστά
side_length_leds = 3 # μετρημένο στο # εικονοστοιχείων
ραντάρ = bytearray (rotate_steps)
xar = bytearray (rotate_steps)
yar = bytearray (rotate_steps)
Save_xar = bytearray (rotate_steps)
save_yar = bytearray (rotate_steps)
ταχύτητα_κινητήρα = 50
ενώ Αλήθεια:
κατάσταση = radio.receive_bytes_into (ραντάρ)
αν η κατάσταση δεν είναι Καμία:
# display.clear ()
για το c, val inenumerate (ραντάρ):
αν ραντάρ [c] <= max_distance:
# υπολογίστε 2δ συντεταγμένες κάθε απόστασης
γωνία = rotate_steps / (rotate_steps -1) * rotate_step * c
γωνία += (180- rotate_span) /2.0
x_c = math.cos (γωνία * math.pi /180.0) * ραντάρ [c]
y_c = math.sin (γωνία * math.pi /180.0) * ραντάρ [c]
# κλιμακώστε τις αποστάσεις που ταιριάζουν στην οθόνη 5x5 microbit
x_c = x_c * (side_length_leds -1) / max_distance
y_c = y_c * (side_length_leds +1) / max_distance
# συντεταγμένες επανατοποθέτησης
x_c += (side_length_leds -1)
y_c = (side_length_leds +1) - y_c
# round συντεταγμένες ακριβώς εκεί που βρίσκονται τα LED
αν x_c - math.floor (x_c) <0,5:
x_c = math.floor (x_c)
αλλού:
x_c = math.ceil (x_c)
αν y_c - math.floor (y_c) <0,5:
y_c = math.floor (y_c)
αλλού:
y_c = math.ceil (y_c)
xar [c] = x_c
yar [c] = y_c
αλλού:
xar [c] = 0
γιάρ [γ] = 0
display.clear ()
για x, y inzip (xar, yar):
display.set_pixel (x, y, 9)
# εκτύπωση (λίστα (zip (xar, yar, ραντάρ)))
κατάστασηA = button_a.s_pressed ()
κατάστασηB = button_b.is_pressed ()
εάν κατάστασηA και stateB:
radio.send_bytes (ustruct.pack ('bb', motor_speed, motor_speed))
εκτύπωση ('εμπρός')
εάν κατάστασηΑ και όχι κατάστασηΒ:
radio.send_bytes (ustruct.pack ("bb", motor_speed, -motor_speed))
εκτύπωση («αριστερά»)
ifnot κατάστασηA και stateB:
radio.send_bytes (ustruct.pack ('bb', -motor_speed, motor_speed))
εκτύπωση ("δεξιά")
εάν δεν είναι κατάσταση και δεν είναι κατάσταση Β:
radio.send_bytes (ustruct.pack ('bb', 0, 0))
εκτύπωση ("διακοπή")

προβολή rawgigglebot_lidar_remote.py που φιλοξενείται με ❤ από το GitHub

Βήμα 7: Ερμηνεία της απομακρυσμένης οθόνης

"loading =" lazy "ελέγξτε το GiggleBot, έχετε τις ακόλουθες επιλογές:

  1. Πατήστε τα κουμπιά A και B για να μετακινήσετε το GiggleBot προς τα εμπρός.
  2. Πατήστε το κουμπί A για να περιστρέψετε το GiggleBot προς τα αριστερά.
  3. Πατήστε το κουμπί B για να περιστρέψετε το GiggleBot προς τα δεξιά.

Για να δείτε σε ποια κατεύθυνση εντοπίζονται τα πλησιέστερα εμπόδια, απλώς κοιτάξτε την οθόνη του τηλεχειριστηρίου (το απομακρυσμένο μικροσκόπιο BBC: bit που κρατάτε). Θα πρέπει να μπορείτε να ελέγχετε το GiggleBot από μακριά χωρίς να το κοιτάτε.

Συνιστάται: