Isi kandungan:

Buat Robot Berpandu Lidar Dengan GiggleBot: 8 Langkah
Buat Robot Berpandu Lidar Dengan GiggleBot: 8 Langkah

Video: Buat Robot Berpandu Lidar Dengan GiggleBot: 8 Langkah

Video: Buat Robot Berpandu Lidar Dengan GiggleBot: 8 Langkah
Video: Teknologi "Senjata Terkutuk" Israel Laser Iron Beam, 135.000 Kali Lebih Cepat dari Rudal Hipersonik 2024, November
Anonim
Buat Robot Berpandu Lidar Dengan GiggleBot
Buat Robot Berpandu Lidar Dengan GiggleBot
Buat Robot Berpandu Lidar Dengan GiggleBot
Buat Robot Berpandu Lidar Dengan GiggleBot
Buat Robot Berpandu Lidar Dengan GiggleBot
Buat Robot Berpandu Lidar Dengan GiggleBot

Dalam tutorial ini, kami membuat GiggleBot mengatasi kesukaran labirin.

Kami memasang servo di GiggleBot yang kami pasangkan sensor jarak. Semasa berjalan, servo akan berputar bolak-balik sehingga sensor jarak dapat mengukur jarak hingga setiap rintangan. Ini berfungsi seperti sensor LIDAR yang biasanya jauh lebih mahal.

Pada masa yang sama, GiggleBot mengirimkan data ini ke mikro BBC terpencil: bit yang memaparkan ke matriks LED 5-by-5 yang kedudukannya relatif terhadap rintangan.

Tugas anda adalah untuk menavigasi GiggleBot hanya dengan melihat apa yang ditunjukkan pada mikro BBC lain: bit. Untuk mengawal GiggleBot, butang pada mikro BBC bit terpencil digunakan.

Kedengarannya menyeronokkan! Mari kita turun ke sana, kan?

Langkah 1: Komponen yang Diperlukan

Komponen yang Diperlukan
Komponen yang Diperlukan

Kami akan memerlukan:

  1. GiggleBot.
  2. Pek bateri untuk mikro BBC: bit. Ia disertakan dengan mikro BBC: bit dalam pakejnya.
  3. x3 bateri AA untuk GiggleBot.
  4. Kabel Grove untuk menyambungkan sensor jarak ke GiggleBot.
  5. Kit Servo dari DexterIndustries.
  6. x3 Mikro BBC: bit. Satu untuk GiggleBot dan satu lagi digunakan untuk mengawal robot dari jauh.
  7. Sensor Jarak dari DexterIndustries.

Dapatkan robot GiggleBot untuk mikro BBC: bit di sini!

Langkah 2: Menyusun Robot

Memasang Robot
Memasang Robot
Memasang Robot
Memasang Robot

Untuk membuat GiggleBot siap diprogramkan, kita perlu memasangnya, walaupun tidak banyak yang perlu dilakukan.

Masukkan 3 bateri AA di petaknya di bahagian bawah GiggleBot.

Pasangkan pakej servo. Pada lengan servo yang berputar, gunakan lubang terakhirnya untuk memasang servo ke penyambung depan GiggleBot. Anda boleh menggunakan skru dan / atau beberapa wayar untuk menjadikannya lebih stabil di tempatnya. Atau anda boleh merekatkannya ke papan. Dalam kes saya, saya menggunakan skru dan wayar pendek untuk mengikat lengan servo ke papan GiggleBot.

Semasa memasang lengan servo ke servo, pastikan servo sudah diatur ke posisi 80. Anda boleh melakukannya dengan memanggil gigglebot.set_servo (gigglebot. RIGHT, 80). Anda boleh membaca lebih lanjut mengenai perkara itu di sini.

Seterusnya, letakkan sensor jarak di bahagian depan pakej servo dan perbaiki seperti pada contoh di atas.

Akhirnya, sambungkan sensor jarak dengan kabel Grove ke mana-mana 2 port I2C dan motor servo ke port kanan yang duduk di GiggleBot - port kanan disebutkan di atasnya.

Langkah 3: Buat Maze Sendiri - Pilihan

Buat Maze Sendiri - Pilihan
Buat Maze Sendiri - Pilihan

Dalam kes ini, saya telah menggunakan sekumpulan kotak untuk membuat trek gelung tertutup, serupa dengan yang NASCAR.

Pada langkah ini, anda boleh menjadi sangat kreatif dan membuatnya sesat yang anda mahukan atau membuatnya terlalu lama kerana itu benar-benar terpulang kepada anda.

Atau jika anda sama sekali tidak menginginkan trek, anda boleh meletakkan GiggleBot di dapur atau ruang tamu misalnya - itu semestinya cukup baik kerana terdapat banyak dinding dan halangan yang masih perlu anda elakkan.

Langkah 4: 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 5: Memprogram GiggleBot - Bahagian I

Pertama, mari kita siapkan skrip GiggleBot. Skrip ini akan menjadikan GiggleBot memutar motor servo 160 darjah (80 darjah pada setiap arah) dan pada masa yang sama mengambil 10 bacaan dari sensor jarak per putaran.

Apabila dihidupkan, GiggleBot akan berdiri sehingga ia menerima arahan dari alat kawalan jauh. Hanya ada 3 perintah: bergerak ke depan, ke kiri atau ke kanan.

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 berasaskan LIDAR yang Dikawal Jauh

dari import gigglebot *
dari jarak_sensor import DistanceSensor
dari tidur import mikrob
dari utime import ticks_us, sleep_us
import ustruct
mengimport radio
# hentikan robot jika sudah bergerak
berhenti ()
# aktifkan radio
radio.on ()
# objek sensor jarak
ds = DistanceSensor ()
ds.start_continuous ()
rotate_time = 0.7 # diukur dalam beberapa saat
rotate_span = 160 # diukur dalam darjah
rotate_steps = 10
overhead_compensation = 1.05 # ditakrifkan dalam peratusan
time_per_step = 10 ** 6 * rotate_time / (rotate_steps * overhead_compensation)
last_read_time = 0
radar = bytearray (putar_ langkah)
servo_rotate_direction = 0 # 0 untuk naik ke atas (0-> 160) dan 1 sebaliknya
radar_index = 0
set_servo (KANAN, 0)
sementara benar:
# baca dari radar
jika ticks_us () - last_read_time> time_per_step:
# baca dari sensor jarak
radar [radar_index] = int (ds.read_range_continuous () / 10)
last_read_time = ticks_us ()
cetak (radar_index)
# lakukan logik untuk memutar servo dari kiri ke kanan
jika radar_index == rotate_steps -1 dan servo_rotate_direction == 0:
set_servo (KANAN, 0)
servo_rotate_direction = 1
elif radar_index == 0dan servo_rotate_direction == 1:
set_servo (KANAN, putar_span)
servo_rotate_direction = 0
lain:
radar_index + = 1if servo_rotate_direction == 0else-1
# dan hantarkan nilai radar
radio.send_bytes (radar)
cuba:
# baca arahan robot
lmotor, rmotor = ustruct.unpack ('bb', radio.receive_bytes ())
# dan aktifkan motor sekiranya ada arahan yang diterima
set_speed (lmotor, rmotor)
memandu ()
kecuali TypeError:
lulus

lihat rawgigglebot_lidar_robot.py dihoskan dengan ❤ oleh GitHub

Langkah 6: Memprogram Jauh - Bahagian II

Yang perlu dilakukan ialah memprogram mikro BBC ke-2: bit yang berfungsi sebagai alat kawalan jauh.

Alat kawalan jauh digunakan untuk memaparkan pada layar buatan 5-dengan-5 piksel jarak relatif ke rintangan. Paling banyak, 10 piksel akan dihidupkan.

Pada masa yang sama, alat kawalan jauh memberi anda kemampuan untuk mengendalikan GiggleBot dengan menekan 2 butang: bergerak ke depan, ke kiri dan ke kanan.

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 berasaskan LIDAR - Kawalan Jauh - Kod Jauh

dari tidur impor mikrob, paparan, butang_a, butang_b
import ustruct
mengimport radio
import matematik
radio.on ()
rotate_steps = 10
rotate_span = 160 # dalam darjah
rotate_step = rotate_span / rotate_steps
max_distance = 50 # dalam sentimeter
side_length_leds = 3 # diukur dalam # piksel
radar = bytearray (rotate_steps)
xar = bytearray (putar_ langkah)
yar = bytearray (putar_ langkah)
save_xar = bytearray (putar_ langkah)
save_yar = bytearray (putar_ langkah)
kelajuan motor = 50
sementara benar:
status = radio.receive_bytes_into (radar)
jika status tidak ada:
# paparan. jelas ()
untuk c, val inenumerate (radar):
jika radar [c] <= jarak_maksimum:
# hitungkan koordinat 2d setiap jarak
angle = rotate_steps / (rotate_steps -1) * rotate_step * c
sudut + = (180- putar_span) /2.0
x_c = math.cos (sudut * math.pi /180.0) * radar [c]
y_c = math.sin (sudut * math.pi /180.0) * radar [c]
# skala jarak agar sesuai pada paparan mikrob 5x5
x_c = x_c * (side_length_leds -1) / max_distance
y_c = y_c * (side_length_leds +1) / max_distance
# koordinat reposisi
x_c + = (side_length_leds -1)
y_c = (side_length_leds +1) - y_c
# koordinat bulat tepat di mana LED dijumpai
jika x_c - math.floor (x_c) <0.5:
x_c = math.floor (x_c)
lain:
x_c = math.ceil (x_c)
jika y_c - math.floor (y_c) <0.5:
y_c = math.floor (y_c)
lain:
y_c = math.ceil (y_c)
xar [c] = x_c
yar [c] = y_c
lain:
xar [c] = 0
yar [c] = 0
paparan. jelas ()
untuk x, y inzip (xar, yar):
display.set_pixel (x, y, 9)
# cetak (senarai (zip (xar, yar, radar)))
stateA = button_a.is_pressed ()
stateB = button_b.is_pressed ()
jika stateA dan stateB:
radio.send_bytes (ustruct.pack ('bb', motor_speed, motor_speed))
cetak ('maju')
jika menyatakanA dan bukan negeriB:
radio.send_bytes (ustruct.pack ('bb', motor_speed, -motor_speed))
cetak ('kiri')
ifnot stateA dan stateB:
radio.send_bytes (ustruct.pack ('bb', -motor_speed, motor_speed))
cetak ('kanan')
ifnot stateA and not stateB:
radio.send_bytes (ustruct.pack ('bb', 0, 0))
cetak ('berhenti')

lihat rawgigglebot_lidar_remote.py dihoskan dengan ❤ oleh GitHub

Langkah 7: Mentafsirkan Skrin Jauh

"loading =" lazy "mengawal GiggleBot, anda mempunyai pilihan berikut:

  1. Tekan butang A dan butang B untuk menggerakkan GiggleBot ke hadapan.
  2. Tekan butang A untuk memutar GiggleBot ke kiri.
  3. Tekan butang B untuk memutar GiggleBot ke kanan.

Untuk melihat ke arah mana rintangan terdekat dapat dikesan, lihat pada skrin remote (mikro BBC jarak jauh: yang anda pegang). Anda seharusnya dapat mengawal GiggleBot dari jauh tanpa melihatnya.

Disyorkan: