Isi kandungan:

Pengikut Garis GiggleBot Menggunakan Python: 5 Langkah
Pengikut Garis GiggleBot Menggunakan Python: 5 Langkah

Video: Pengikut Garis GiggleBot Menggunakan Python: 5 Langkah

Video: Pengikut Garis GiggleBot Menggunakan Python: 5 Langkah
Video: Tutorial Cara Membuat Program Untuk Line Follower 2024, Julai
Anonim
Pengikut GiggleBot Line Menggunakan Python
Pengikut GiggleBot Line Menggunakan Python
Pengikut Garis GiggleBot Menggunakan Python
Pengikut Garis GiggleBot Menggunakan Python
Pengikut GiggleBot Line Menggunakan Python
Pengikut GiggleBot Line Menggunakan Python

Kali ini, kami memprogram di MicroPython the Dexter Industries GiggleBot untuk mengikuti garis hitam menggunakan sensor pengikut baris terbina dalam.

GiggleBot harus dipasangkan dengan mikro BBC: bit agar dapat dikendalikan dengan tepat.

Sekiranya tutorial ini terlalu maju untuk anda dan pengaturcaraan GiggleBot terlalu banyak buat masa ini, anda selalu dapat melalui tutorial pemula yang menunjukkan kepada anda bagaimana robot dapat diprogramkan di MakeCode di sini. Tutorial yang dipautkan akan memandu anda melalui asas-asasnya.

Langkah 1: Komponen yang Diperlukan

Komponen yang Diperlukan
Komponen yang Diperlukan

Komponen perkakasan berikut diperlukan:

  1. Bateri x3 AA - dalam kes saya, saya menggunakan bateri yang boleh dicas semula yang mempunyai voltan lebih rendah secara keseluruhan.
  2. Robot Dexter Industries GiggleBot untuk mikro: bit.
  3. Mikro BBC: bit.

Sudah tentu, anda juga memerlukan kabel USB mikro untuk memprogram mikro BBC: bit - kabel ini biasanya terdapat dalam paket BBC mikro: bit atau anda selalu boleh menggunakan kabel yang digunakan untuk mengecas telefon pintar (Android).

Dapatkan GiggleBot untuk mikro: bit di sini

Langkah 2: Siapkan Trek

Siapkan Trek
Siapkan Trek

Anda perlu melalui mencetak beberapa jubin dan merancang trek anda sendiri. Anda boleh menggunakan jubin kami sendiri sehingga anda yakin 100% anda meniru syarat kami. Atau jika anda merasa suka berpetualang, anda boleh menggunakan pita hitam dan membuatnya sendiri. Inilah PDF untuk jubin yang telah kami gunakan.

Trek di atas terdiri daripada bilangan jubin yang berbeza berikut:

  • 12 jubin jenis # 1.
  • 5 jubin jenis # 2.
  • 3 templat jenis jubin # 5.
  • 3 templat jenis jubin # 6 - di sini, anda akan mendapat satu jubin tambahan.

Seterusnya, cetak dan potong. Cuba letakkan seperti di foto di atas dan ingat bahawa di bahagian kanan atas trek, 2 jubin harus bertindih satu sama lain - ini dijangkakan sekiranya anda tertanya-tanya jika anda melakukan sesuatu yang salah.

Langkah 3: Menyiapkan Alam Sekitar

Menetapkan Alam Sekitar
Menetapkan Alam Sekitar

Agar anda dapat memprogram mikro BBC: bit di MicroPython, anda harus menyediakan editor untuknya (Penyunting Mu) dan menetapkan GiggleBot MicroPython Runtime sebagai waktu operasinya. Untuk itu, anda mesti mengikuti arahan di halaman ini. Pada masa ini, versi v0.4.0 runtime digunakan.

Langkah 4: Memprogram GiggleBot

Sebelum melihatnya, runtime GiggleBot MicroPython mengandungi runtime klasik untuk BBC: bit dan perpustakaan lain untuk menyokong GiggleBot dan Sensor Industri Dexter lain.

Setelah menyiapkannya, buka skrip berikut di editor Mu dan klik pada Flash. Ini akan memancarkan GiggleBot MicroPython Runtime dan skrip yang baru anda buka ke mikro BBC anda: bit. Skrip juga ditunjukkan di bawah.

Setelah proses flashing selesai, tumpukan mikro BBC: masukkan GiggleBot dengan neopixel papan menghadap ke depan, letakkan di trek dan hidupkan.

Perhatikan bahawa dalam skrip, PID dan 2 pemalar lain (speed setpoint dan minimum speed constants) sudah ditetapkan.

Catatan: Skrip berikut mungkin tidak mempunyai ruang kosong dan ini mungkin disebabkan oleh beberapa masalah dalam menampilkan GitHub Gists. Klik pada inti untuk membawa anda ke halaman GitHubnya di mana anda boleh menyalin-menampal kodnya.

GiggleBot PID Line Follower - Ditala dengan NeoPixels

dari import mikrob *
dari import gigglebot *
dari utime import sleep_ms, ticks_us
import ustruct
# mulakan neopixel GB
neo = init ()
# masa
kemas kini_kadar = 50
# keuntungan / pemalar (dengan anggapan voltan bateri sekitar 4.0 volt)
Kp = 25.0
Ki = 0.5
Kd = 35.0
trigger_point = 0.3
min_speed_percent = 0.3
asas_kelajuan = 70
setpoint = 0.5
last_position = setpoint
kamiran = 0.0
run_neopixels = Betul
center_pixel = 5 # di mana piksel tengah senyuman terletak pada GB
# turquoise = tuple (peta (lambda x: int (x / 5), (64, 224, 208))) # warna untuk digunakan untuk menarik ralat dengan neopixel
# turquoise = (12, 44, 41) # yang betul-betul turquoise di atas memberikan komen di atas ini
error_width_per_pixel = 0.5 / 3 # ralat maksimum dibahagi dengan bilangan segmen antara setiap neopixel
defupper_bound_linear_speed_reducer (abs_error, trigger_point, upper_bound, terkecil_motor_power, tertinggi_motor_power):
asas_kelajuan global
jika abs_error> = trigger_point:
# x0 = 0.0
# y0 = 0.0
# x1 = atas_batas - titik pemicu
# y1 = 1.0
# x = abs_error - trigger_point
# y = y0 + (x - x0) * (y1 - y0) / (x1 - x0)
# sama seperti
y = (abs_error - trigger_point) / (upper_bound - trigger_point)
motor_power = base_speed * (terkecil_motor_power + (1- y) * (tertinggi_motor_power - terkecil_motor_power))
mengembalikan motor_power
lain:
return base_speed * tertinggi_motor_power
lari = Salah
sebelumnya_kesalahan = 0
sementara benar:
# jika butang a ditekan maka mulailah mengikuti
jika button_a.is_pressed ():
lari = Betul
# tetapi jika butang b ditekan hentikan pengikut garis
jika button_b.is_pressed ():
lari = Salah
kamiran = 0.0
error_ sebelumnya = 0.0
piksel_off ()
berhenti ()
tidur_ms (500)
jika dijalankan isTrue:
# baca sensor baris
start_time = ticks_us ()
kanan, kiri = read_sensor (LINE_SENSOR, KEDUA)
# garisan berada di sebelah kiri ketika kedudukan <0.5
# garis berada di sebelah kanan ketika kedudukan> 0.5
# garisan berada di tengah ketika kedudukan = 0.5
# itu adalah aritmetik berwajaran
cuba:
kedudukan = kanan / terapung (kiri + kanan)
kecuali ZeroDivisionError:
kedudukan = 0.5
# julat mestilah (0, 1) dan bukan [0, 1]
jika kedudukan == 0: kedudukan = 0.001
jika kedudukan == 1: kedudukan = 0.999
# gunakan alat kawalan PD
ralat = kedudukan - setpoint
kamiran + = ralat
pembetulan = Kp * ralat + Ki * integral + Kd * (ralat - ralat sebelumnya)
kesalahan_ sebelumnya = ralat
# hitung kelajuan motor
motor_speed = upper_bound_linear_speed_reducer (abs (ralat), setpoint * trigger_point, setpoint, min_speed_percent, 1.0)
leftMotorSpeed = kelajuan motor + pembetulan
rightMotorSpeed = motor_speed - pembetulan
# menerangi neopixel mengikut kesalahan yang diberikan
jika run_neopixels isTrueand total_counts% 3 == 0:
untuk i in '\ x00 / x01 / x02 / x03 / x04 / x05 / x06 / x07 / x08':
neo = (0, 0, 0)
untuk i inb '\ x00 / x01 / x02 / x03':
ifabs (error)> error_width_per_pixel * i:
jika ralat <0:
# neo [center_pixel + i] = pirus
neo [center_pixel + i] = (12, 44, 41)
lain:
# neo [center_pixel - i] = pirus
neo [center_pixel + i] = (12, 44, 41)
lain:
peratus = 1- (error_width_per_pixel * i -abs (ralat)) / error_width_per_pixel
# nyalakan piksel semasa
jika ralat <0:
# neo [center_pixel + i] = tuple (peta (lambda x: int (x * peratusan), pirus))
neo [center_pixel + i] = (int (64 * peratus / 5), int (224 * peratus / 5), int (208 * peratus / 5))
lain:
# neo [center_pixel - i] = tuple (peta (lambda x: int (x * peratusan), pirus))
neo [center_pixel - i] = (int (64 * peratus / 5), int (224 * peratus / 5), int (208 * peratus / 5))
rehat
neo.show ()
cuba:
# klip kelajuan motor
jika dibiarkanMotorSpeed> 100:
leftMotorSpeed = 100
rightMotorSpeed = rightMotorSpeed - leftMotorSpeed +100
jika betulMotorSpeed> 100:
betulMotorSpeed = 100
leftMotorSpeed = leftMotorSpeed - kananMotorSpeed +100
jika dibiarkanMotorSpeed <-100:
leftMotorSpeed = -100
jika betulMotorSpeed <-100:
betulMotorSpeed = -100
# aktifkan motor
set_speed (leftMotorSpeed, rightMotorSpeed)
memandu ()
# cetak ((ralat, kelajuan motor))
kecuali:
# sekiranya kita menghadapi masalah yang tidak dapat diperbaiki
lulus
# dan mengekalkan frekuensi gelung
end_time = ticks_us ()
delay_diff = (end_time - start_time) / 1000
if1000.0 / update_rate - delay_diff> 0:
tidur (1000.0 / update_rate - delay_diff)

lihat rawgigglebot_tuned_line_follower.py dihoskan dengan ❤ oleh GitHub

Langkah 5: Membiarkannya Berjalan

Terdapat 2 butang pada mikro BBC: bit: butang A dan butang B:

  • Menekan butang A menetapkan GiggleBot mengikuti garis (jika ada).
  • Menekan butang B menghentikan GiggleBot dan menetapkan semula semuanya sehingga anda dapat menggunakannya semula.

Sangat disarankan untuk tidak mengangkat GiggleBot semasa mengikuti garis dan kemudian meletakkannya semula kerana kesalahan yang dikira dapat terkumpul dan benar-benar merosakkan laluan robot. Sekiranya anda ingin mengangkatnya, tekan butang B dan kemudian apabila anda meletakkannya kembali tekan A sekali lagi.

Disyorkan: