Daftar Isi:

Membuat Robot Berpanduan Lidar Dengan GiggleBot: 8 Langkah
Membuat Robot Berpanduan Lidar Dengan GiggleBot: 8 Langkah

Video: Membuat Robot Berpanduan Lidar Dengan GiggleBot: 8 Langkah

Video: Membuat Robot Berpanduan Lidar Dengan GiggleBot: 8 Langkah
Video: Is LIDAR easy to use for hobbyists? DIY Roomba? Obstacle Avoidance System for Robotics 2024, November
Anonim
Buat Robot yang Dipandu Lidar Dengan GiggleBot
Buat Robot yang Dipandu Lidar Dengan GiggleBot
Buat Robot yang Dipandu Lidar Dengan GiggleBot
Buat Robot yang Dipandu Lidar Dengan GiggleBot
Buat Robot yang Dipandu Lidar Dengan GiggleBot
Buat Robot yang Dipandu Lidar Dengan GiggleBot

Dalam tutorial ini, kami membuat GiggleBot mengatasi kesulitan labirin.

Kami memasang servo pada GiggleBot tempat kami memasang sensor jarak. Saat berjalan, servo akan berputar maju mundur sehingga sensor jarak dapat mengukur jarak hingga setiap rintangan. Ini bekerja seperti sensor LIDAR yang biasanya jauh lebih mahal.

Pada saat yang sama, GiggleBot mengirimkan data ini ke mikro: bit BBC jarak jauh yang menampilkan ke matriks LED 5-kali-5 posisi relatifnya terhadap rintangan.

Tugas Anda adalah dapat menavigasi GiggleBot hanya dengan melihat apa yang ditampilkan di mikro:bit BBC lainnya. Untuk mengontrol GiggleBot, tombol-tombol pada remote BBC micro:bit digunakan.

Itu terdengar menyenangkan! Mari kita turun ke sana, oke?

Langkah 1: Komponen yang Diperlukan

Komponen yang Diperlukan
Komponen yang Diperlukan

Kita akan membutuhkan:

  1. GiggleBot.
  2. Paket baterai untuk mikro BBC: bit. Itu datang bersama dengan mikro BBC: bit dalam paketnya.
  3. baterai AA x3 untuk GiggleBot.
  4. Kabel Grove untuk menghubungkan sensor jarak ke GiggleBot.
  5. Kit Servo dari DexterIndustries.
  6. x3 BBC mikro: bit. Satu untuk GiggleBot dan satu lagi digunakan untuk mengontrol robot dari jauh.
  7. Sensor Jarak dari DexterIndustries.

Dapatkan robot GiggleBot untuk mikro BBC: bit di sini!

Langkah 2: Merakit Robot

Merakit Robot
Merakit Robot
Merakit Robot
Merakit Robot

Untuk membuat GiggleBot siap diprogram, kita perlu merakitnya, meskipun tidak banyak yang harus dilakukan.

Masukkan 3 baterai AA di kompartemennya di bawah GiggleBot.

Merakit paket servo. Untuk lengan servo yang berputar, gunakan lubang terakhir untuk memasang servo ke konektor depan GiggleBot. Anda dapat menggunakan sekrup dan/atau kawat untuk membuatnya lebih stabil di tempatnya. Atau Anda bisa menempelkannya ke papan. Dalam kasus saya, saya menggunakan sekrup dan kabel pendek untuk mengikat lengan servo ke papan GiggleBot.

Saat memasang servo arm ke servo, pastikan servo sudah diatur ke posisi 80. Anda dapat melakukannya dengan memanggil cekikikan.set_servo(gigglebot. RIGHT, 80). Anda dapat membaca lebih lanjut tentang itu di sini.

Selanjutnya, letakkan sensor jarak di sisi depan paket servo dan perbaiki seperti pada contoh di atas.

Terakhir, sambungkan sensor jarak dengan kabel Grove ke salah satu dari 2 port I2C dan motor servo ke port kanan yang ada di GiggleBot - port kanan disebutkan di atasnya.

Langkah 3: Buat Labirin Anda Sendiri - Opsional

Buat Labirin Anda Sendiri - Opsional
Buat Labirin Anda Sendiri - Opsional

Dalam hal ini, saya telah menggunakan banyak kotak untuk membuat trek loop tertutup, mirip dengan trek NASCAR.

Pada langkah ini, Anda bisa menjadi sangat kreatif dan membuatnya sepelintir yang Anda inginkan atau membuatnya sangat panjang karena itu terserah Anda.

Atau jika Anda tidak menginginkan trek sama sekali, Anda bisa meletakkan GiggleBot di dapur atau ruang tamu misalnya - itu sudah cukup bagus karena masih banyak tembok dan rintangan yang harus Anda hindari.

Langkah 4: Menyiapkan Lingkungan

Menyiapkan Lingkungan
Menyiapkan Lingkungan

Agar Anda dapat memprogram BBC micro:bit di MicroPython, Anda harus menyiapkan editor untuknya (Mu Editor) dan mengatur GiggleBot MicroPython Runtime sebagai runtime-nya. Untuk itu, Anda harus mengikuti petunjuk di halaman ini. Pada saat ini, runtime versi v0.4.0 digunakan.

Langkah 5: Memprogram GiggleBot - Bagian I

Pertama, mari kita siapkan skrip GiggleBot. Script ini akan membuat GiggleBot memutar motor servonya 160 derajat (80 derajat di setiap arah) sementara pada saat yang sama mengambil 10 pembacaan dari sensor jarak per putaran.

Saat dihidupkan, GiggleBot akan berdiri sampai menerima perintah dari remote control. Hanya ada 3 perintah: maju, ke kiri atau ke kanan.

Catatan: Skrip berikut mungkin memiliki spasi putih yang hilang dan ini tampaknya disebabkan oleh beberapa masalah dalam menampilkan GitHub Gists. Klik pada intinya untuk membawa Anda ke halaman GitHub di mana Anda dapat menyalin-tempel kode.

GiggleBot berbasis LIDAR yang dikendalikan dari jarak jauh

dari impor cekikikan*
dari distance_sensor impor DistanceSensor
dari microbit impor tidur
dari utime import ticks_us, sleep_us
impor ustruk
impor radio
#hentikan robot jika sudah bergerak
berhenti()
# aktifkan radio
radio.on()
# objek sensor jarak
ds = Sensor Jarak()
ds.start_continuous()
rotate_time =0,7# diukur dalam detik
rotate_span =160# diukur dalam derajat
putar_langkah = 10
overhead_compensation = 1,05# ditentukan dalam persentase
time_per_step =10**6* rotate_time / (rotate_steps * overhead_compensation)
last_read_time =0
radar =bytearray(rotate_steps)
servo_rotate_direction =0# 0 untuk naik (0->160) dan 1 sebaliknya
radar_index =0
set_servo(KANAN, 0)
sementara Benar:
# membaca dari radar
jika ticks_us() - last_read_time > time_per_step:
# membaca dari sensor jarak
radar[radar_index] =int(ds.read_range_continuous() /10)
last_read_time = ticks_us()
cetak (indeks_radar)
# lakukan logika untuk memutar servo dari kiri ke kanan
jika radar_index == rotate_steps -1and servo_rotate_direction ==0:
set_servo(KANAN, 0)
servo_rotate_direction = 1
elif radar_index ==0dan servo_rotate_direction ==1:
set_servo(KANAN, rotate_span)
servo_rotate_direction =0
lain:
radar_index +=1jika servo_rotate_direction ==0else-1
# dan kirim nilai radar
radio.send_bytes(radar)
mencoba:
# membaca perintah robot
lmotor, rmotor = ustruct.unpack('bb', radio.receive_bytes())
# dan aktifkan motor jika ada perintah yang diterima
set_speed(lmotor, rmotor)
menyetir()
exceptionTypeError:
lulus

lihat rawgigglebot_lidar_robot.py dihosting dengan ❤ oleh GitHub

Langkah 6: Memprogram Remote - Bagian II

Yang tersisa untuk dilakukan adalah memprogram micro:bit BBC ke-2 yang berfungsi sebagai remote.

Remote digunakan untuk menampilkan pada layar 5-kali-5 piksel jarak relatif ke rintangan. Paling-paling, akan ada 10 piksel yang dihidupkan.

Pada saat yang sama, remote memberi Anda kemampuan untuk mengontrol GiggleBot dari jarak jauh dengan menekan 2 tombolnya: maju, ke kiri dan ke kanan.

Catatan: Skrip berikut mungkin memiliki spasi putih yang hilang dan ini tampaknya disebabkan oleh beberapa masalah dalam menampilkan GitHub Gists. Klik pada intinya untuk membawa Anda ke halaman GitHub di mana Anda dapat menyalin-tempel kode.

GiggleBot Berbasis LIDAR Terkendali Jarak Jauh - Kode Jarak Jauh

dari microbit import sleep, display, button_a, button_b
impor ustruk
impor radio
impor matematika
radio.on()
putar_langkah = 10
rotate_span =160# dalam derajat
rotate_step = rotate_span / rotate_steps
max_distance =50# dalam sentimeter
side_length_leds =3# diukur dalam # piksel
radar =bytearray(rotate_steps)
xar =bytearray(rotate_steps)
yar =bytearray(rotate_steps)
save_xar =bytearray(rotate_steps)
save_yar =bytearray(rotate_steps)
kecepatan_motor = 50
sementara Benar:
status = radio.receive_bytes_into(radar)
jika statusnya bukan Tidak Ada:
# tampilan.clear()
untuk c, val inenumerate(radar):
jika radar[c] <= max_distance:
# hitung koordinat 2d dari setiap jarak
angle = rotate_steps / (rotate_steps -1) * rotate_step * c
sudut += (180- rotate_span) /2.0
x_c = math.cos(angle * math.pi /180.0) * radar[c]
y_c = math.sin(angle * math.pi /180.0) * radar[c]
# skala jarak agar sesuai dengan tampilan mikrobit 5x5
x_c = x_c * (side_length_leds -1) / max_distance
y_c = y_c * (side_length_leds +1) / max_distance
# reposisi koordinat
x_c += (sisi_panjang_led -1)
y_c = (sisi_panjang_led +1) - y_c
# koordinat bulat persis di mana LED ditemukan
if x_c - math.floor(x_c) <0,5:
x_c = matematika.lantai(x_c)
lain:
x_c = matematika.ceil(x_c)
jika y_c - math.floor(y_c) <0,5:
y_c = matematika.lantai(y_c)
lain:
y_c = matematika.ceil(y_c)
xar[c] = x_c
yar[c] = y_c
lain:
xar[c] =0
yar[c] =0
tampilan.clear()
untuk x, y inzip(xar, yar):
display.set_pixel(x, y, 9)
# print(daftar(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))
print('maju')
jika stateA dan bukan stateB:
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 dan not stateB:
radio.send_bytes(ustruct.pack('bb', 0, 0))
cetak('berhenti')

lihat rawgigglebot_lidar_remote.py dihosting dengan ❤ oleh GitHub

Langkah 7: Menafsirkan Layar Jarak Jauh

"loading="lazy" mengontrol GiggleBot, Anda memiliki opsi berikut:

  1. Tekan tombol A dan tombol B untuk menggerakkan GiggleBot ke depan.
  2. Tekan tombol A untuk memutar GiggleBot ke kiri.
  3. Tekan tombol B untuk memutar GiggleBot ke kanan.

Untuk melihat ke arah mana rintangan terdekat terdeteksi, lihat saja di layar remote (remote BBC micro:bit yang Anda pegang). Anda harus dapat mengontrol GiggleBot dari jauh tanpa melihatnya.

Direkomendasikan: