Daftar Isi:

AI di LEGO EV3 Maze-Driving Robot: 13 Langkah
AI di LEGO EV3 Maze-Driving Robot: 13 Langkah

Video: AI di LEGO EV3 Maze-Driving Robot: 13 Langkah

Video: AI di LEGO EV3 Maze-Driving Robot: 13 Langkah
Video: robot race. line follower robot with arduino program 2024, Juli
Anonim
Image
Image
Bagaimana Labirin Dipecahkan
Bagaimana Labirin Dipecahkan

Ini adalah robot otonom sederhana dengan beberapa kecerdasan buatan. Ini dirancang untuk menjelajahi labirin dan ketika ditempatkan kembali di pintu masuk, untuk berkendara melalui pintu keluar dan menghindari jalan buntu. Ini jauh lebih rumit dari proyek saya sebelumnya, yang hanya melewati labirin. Di sini, robot harus mengingat jalur yang telah dilaluinya, menghapus jalan buntu, menyimpan jalur baru, dan kemudian mengikuti jalur baru.

Robot saya sebelumnya dijelaskan di sini:

Robot ini dibuat menggunakan LEGO Mindstorms EV3. Perangkat Lunak EV3 berjalan di komputer dan menghasilkan program, yang kemudian diunduh ke mikrokontroler yang disebut EV3 Brick. Metode pemrograman berbasis ikon dan tingkat tinggi. Ini sangat mudah dan serbaguna.

Perlengkapan

BAGIAN

  1. LEGO Mindstorms EV3 set
  2. Sensor ultrasonik LEGO Mindstorms EV3. Itu tidak termasuk dalam set EV3.
  3. Karton bergelombang untuk labirin. Dua karton sudah cukup.
  4. Sepotong kecil karton tipis untuk membantu menstabilkan beberapa sudut dan dinding.
  5. Rekatkan dan rekatkan untuk menyambungkan potongan karton.
  6. Amplop kartu ucapan merah untuk mengidentifikasi jalan keluar labirin.

PERALATAN

  1. Pisau utilitas untuk memotong karton.
  2. Penggaris besi untuk membantu proses pemotongan.

PERANGKAT LUNAK

Programnya ada di sini:

Langkah 1: Bagaimana Labirin Dipecahkan

METODE MAZE-DRIVING

Ada beberapa metode navigasi labirin. Jika Anda tertarik untuk mempelajarinya, mereka dijelaskan dengan sangat baik di artikel Wikipedia berikut:

Saya memilih metode mengikuti dinding sebelah kiri. Idenya adalah robot akan menjaga dinding di sisi kirinya dengan membuat keputusan berikut saat melewati labirin:

  1. Jika memungkinkan untuk berbelok ke kiri, lakukanlah.
  2. Jika tidak, jalan lurus jika memungkinkan.
  3. Jika tidak bisa ke kiri atau lurus, belok kanan, jika memungkinkan.
  4. Jika tidak ada hal di atas yang mungkin, ini pasti jalan buntu. Berputar.

Satu peringatan adalah bahwa metode ini bisa gagal jika labirin memiliki lingkaran di dalamnya. Tergantung pada penempatan loop, robot dapat terus berputar dan berputar di sekitar loop. Solusi yang mungkin untuk masalah ini adalah robot beralih ke aturan pengikut dinding kanan jika menyadari bahwa itu berjalan dalam satu lingkaran. Saya tidak menyertakan penyempurnaan ini dalam proyek saya.

PEMECAHAN MAZE UNTUK MENEMUKAN JALAN LANGSUNG

Saat mengemudi melalui labirin, robot harus mengingat jalur yang dilaluinya dan menghilangkan jalan buntu. Ini menyelesaikan ini dengan menyimpan setiap belokan dan persimpangan dalam array, memeriksa kombinasi belokan dan persimpangan tertentu saat berjalan, dan mengganti kombinasi yang menyertakan jalan buntu. Daftar belokan dan persimpangan terakhir adalah jalur langsung melalui labirin.

Belokan yang mungkin adalah: Kiri, Kanan, Belakang (di jalan buntu), dan Lurus (yang merupakan persimpangan).

Kombinasi diganti sebagai berikut:

  • "Kiri, Belakang, Kiri" menjadi "Lurus."
  • "Kiri, Belakang, Kanan" menjadi "Kembali."
  • "Kiri, Belakang, Lurus" menjadi "Kanan."
  • "Kanan, Belakang, Kiri" menjadi "Kembali".
  • "Lurus, Belakang, Kiri" menjadi "Kanan".
  • "Lurus, Kembali, Lurus" menjadi "Kembali."

BAGAIMANA ROBOT MENANGANI MAZE SAYA

  1. Ketika robot mulai mengemudi, ia melihat ruang di sebelah kanan dan menyimpan Straight dalam daftar dalam larik.
  2. Kemudian berbelok ke kiri dan menambahkan Kiri ke daftar. Daftar sekarang berisi: Lurus, Kiri.
  3. Dengan jalan buntu, itu berbalik dan menambahkan Kembali ke daftar. Daftar sekarang berisi: Lurus, Kiri, Belakang.
  4. Melewati jalur yang digunakannya dari pintu masuk, itu menambahkan Straight ke daftar. Daftar sekarang berisi: Lurus, Kiri, Belakang, Lurus. Ia mengenali kombinasi dan mengubah Kiri, Belakang, Lurus ke Kanan. Daftar sekarang berisi Lurus, Kanan.
  5. Dengan jalan buntu, itu berbalik dan menambahkan Kembali ke daftar. Daftar sekarang berisi: Lurus, Kanan, Kembali.
  6. Setelah belok kiri daftar berisi Lurus, Kanan, Belakang, Kiri. Ini mengenali kombinasi dan mengubah Kanan, Belakang, Kiri ke Belakang. Daftar sekarang berisi Lurus, Kembali.
  7. Setelah belokan kiri berikutnya daftar berisi Lurus, Belakang, Kiri. Itu mengubah kombinasi itu menjadi Kanan. Daftar sekarang hanya berisi Kanan.
  8. Ini melewati spasi dan menambahkan Lurus ke daftar. Daftar sekarang berisi Kanan, Lurus.
  9. Setelah belok kanan daftarnya berisi Kanan, Lurus, Kanan yang merupakan jalur langsung.

Langkah 2: Pertimbangan Saat Memprogram Robot

PERTIMBANGAN UNTUK SETIAP MIKROKONTROLER

Ketika robot memutuskan untuk berbelok, ia harus membuat belokan lebar, atau maju jarak pendek sebelum berputar dan setelah berputar maju lagi dalam jarak pendek tanpa memeriksa sensor. Alasan jarak pendek pertama adalah agar robot tidak menabrak dinding setelah belokan, dan alasan jarak pendek kedua adalah setelah robot berputar, sensor akan melihat jarak jauh yang baru saja datang., dan robot akan berpikir itu harus berputar lagi, yang bukan hal yang tepat untuk dilakukan.

Ketika robot merasakan persimpangan di sebelah kanan tetapi tidak berbelok ke kanan, saya telah menemukan bahwa ada baiknya jika robot bergerak maju sekitar 10 inci (25 cm) tanpa memeriksa sensornya.

PERTIMBANGAN KHUSUS UNTUK LEGO MINDSTORMS EV3

Meskipun LEGO Mindstorms EV3 sangat serbaguna, LEGO Mindstorms EV3 memungkinkan tidak lebih dari satu dari setiap jenis sensor yang terhubung ke satu Bata. Dua atau lebih Bata dapat dirangkai dengan daisy-chain, tetapi saya tidak ingin membeli Bata lain, jadi saya menggunakan sensor berikut (bukan tiga sensor ultrasonik): sensor inframerah, sensor warna, dan sensor ultrasonik. Ini berhasil dengan baik.

Tetapi sensor warna memiliki jangkauan yang sangat pendek, sekitar 2 inci (5 cm), yang mengarah pada beberapa pertimbangan khusus seperti yang dijelaskan di bawah ini:

  1. Ketika sensor warna mendeteksi dinding di depan dan robot memutuskan untuk berbelok ke kanan atau berbalik, ia harus mundur terlebih dahulu, untuk memberi dirinya cukup ruang untuk berbelok tanpa menabrak dinding.
  2. Masalah rumit terjadi dengan beberapa persimpangan "Lurus". Karena jarak sensor warna yang pendek, robot tidak dapat menentukan apakah mendeteksi persimpangan "Lurus" yang tepat atau mengarah ke belokan kanan. Saya telah mencoba untuk memperbaiki masalah ini dengan mengatur program untuk menyimpan "Lurus" dalam daftar setiap kali robot merasakan satu, dan kemudian menghilangkan lebih dari satu "Lurus" berturut-turut dalam daftar. Ini memperbaiki situasi di mana belokan kanan mengikuti "Lurus" di labirin tetapi tidak situasi di mana ada belokan kanan tanpa "Lurus" sebelumnya. Saya juga mencoba mengatur program untuk menghilangkan "Lurus" jika tepat sebelum "Kanan" tetapi ini tidak berhasil jika belokan kanan mengikuti "Lurus". Saya belum dapat menemukan solusi yang cocok untuk semua kasus, meskipun saya kira robot dapat melihat jarak yang ditempuh (dengan membaca sensor putaran motor) dan memutuskan apakah itu "Lurus" atau kanan berbelok. Saya tidak berpikir komplikasi ini layak dilakukan untuk tujuan mendemonstrasikan konsep AI dalam proyek ini.
  3. Keuntungan dari sensor warna adalah membedakan antara cokelat dinding dan merah penghalang yang saya gunakan di pintu keluar, dan memberikan cara mudah bagi robot untuk memutuskan kapan ia telah menyelesaikan labirin.

Langkah 3: Program Utama

Program Utama
Program Utama

LEGO Mindstorms EV3 memiliki metode pemrograman berbasis ikon yang sangat nyaman. Blok ditampilkan di bagian bawah layar tampilan pada komputer dan dapat diseret-dan-jatuhkan ke jendela pemrograman untuk membuat program. EV3 Brick dapat dihubungkan ke komputer dengan kabel USB, Wi-Fi atau Bluetooth, dan program kemudian dapat diunduh dari komputer ke Brick.

Program ini terdiri dari program utama dan beberapa “My Blocks” yang merupakan subrutin. File yang diunggah berisi seluruh program, yang ada di sini:

Langkah-langkah dalam program utama adalah sebagai berikut:

  1. Mendefinisikan dan menginisialisasi variabel turn-counting dan array.
  2. Tunggu 5 detik dan katakan "Pergi."
  3. Mulai lingkaran.
  4. Berkendara melalui labirin. Ketika pintu keluar tercapai, loop keluar.
  5. Tampilan di layar Brick, persimpangan ditemukan di labirin sejauh ini.
  6. Periksa apakah jalur harus dipersingkat.
  7. Tampilkan persimpangan di jalur yang dipersingkat.
  8. Ulangi kembali ke langkah 4.
  9. Setelah loop, drive jalur langsung.

Tangkapan layar menunjukkan program utama ini.

Langkah 4: Blok Saya (Subrutin)

Blok Saya (Subrutin)
Blok Saya (Subrutin)

Navigasi Blok Saya, yang mengontrol cara robot melewati labirin, ditampilkan. Cetakannya sangat kecil dan mungkin tidak terbaca. Tapi ini adalah contoh bagus tentang betapa serbaguna dan kuatnya pernyataan if (disebut Switch dalam sistem LEGO EV3).

  1. Panah #1 menunjuk ke Sakelar yang memeriksa apakah sensor inframerah melihat objek lebih dari jarak tertentu. Jika demikian, rangkaian blok teratas akan dieksekusi. Jika tidak, maka kontrol diteruskan ke rangkaian blok bawah yang besar, di mana panah #2 berada.
  2. Panah #2 menunjuk ke Switch yang memeriksa warna apa yang dilihat oleh sensor warna. Ada 3 case: tidak ada warna di bagian atas, merah di tengah, dan coklat di bagian bawah.
  3. Dua panah #3 menunjuk ke Sakelar yang memeriksa apakah sensor ultrasonik melihat objek lebih dari jarak tertentu. Jika demikian, rangkaian blok teratas akan dieksekusi. Jika tidak, maka kontrol diteruskan ke rangkaian blok bawah.

Blok Saya untuk memperpendek jalur dan untuk mengarahkan jalur langsung lebih rumit dan sama sekali tidak terbaca, sehingga tidak disertakan dalam dokumen ini.

Langkah 5: Mulai Membangun Robot: Basis

Mulai Membangun Robot: Pangkalan
Mulai Membangun Robot: Pangkalan
Mulai Membangun Robot: Pangkalan
Mulai Membangun Robot: Pangkalan

Seperti disebutkan sebelumnya, LEGO Mindstorms EV3 memungkinkan tidak lebih dari satu dari setiap jenis sensor yang terhubung ke satu Bata. Saya menggunakan sensor berikut (bukan tiga sensor ultrasonik): sensor inframerah, sensor warna, dan sensor ultrasonik.

Pasangan foto di bawah ini menunjukkan cara membuat robot. Foto pertama dari masing-masing pasangan menunjukkan bagian-bagian yang dibutuhkan, dan foto kedua menunjukkan bagian-bagian yang sama dihubungkan bersama.

Langkah pertama adalah membangun dasar robot, menggunakan bagian-bagian yang ditunjukkan. Basis robot ditampilkan terbalik. Bagian kecil berbentuk L di bagian belakang robot merupakan penyangga bagian belakang. Ini meluncur saat robot bergerak. Ini bekerja dengan baik. Kit EV3 tidak memiliki bagian tipe bola bergulir.

Langkah 6: Puncak Pangkalan, 1

Bagian atas Pangkalan, 1
Bagian atas Pangkalan, 1
Bagian atas Pangkalan, 1
Bagian atas Pangkalan, 1

Langkah ini dan 2 langkah selanjutnya adalah untuk bagian atas dasar robot, sensor warna, dan kabel, yang semuanya adalah kabel 10 inci (26 cm).

Langkah 7: Puncak Pangkalan, 2

Bagian atas Pangkalan, 2
Bagian atas Pangkalan, 2
Bagian atas Pangkalan, 2
Bagian atas Pangkalan, 2

Langkah 8: Bagian Atas Pangkalan, 3

Bagian atas Pangkalan, 3
Bagian atas Pangkalan, 3
Bagian Atas Pangkalan, 3
Bagian Atas Pangkalan, 3

Langkah 9: Sensor Inframerah dan Ultrasonik

Sensor Inframerah dan Ultrasonik
Sensor Inframerah dan Ultrasonik
Sensor Inframerah dan Ultrasonik
Sensor Inframerah dan Ultrasonik

Selanjutnya, adalah sensor inframerah (di sisi kiri robot) dan sensor ultrasonik (di sebelah kanan). Juga, 4 pin untuk memasang Bata di atas.

Sensor inframerah dan ultrasonik terletak secara vertikal, bukan horizontal normal. Ini memberikan identifikasi sudut atau ujung dinding yang lebih baik.

Langkah 10: Kabel

Kabel
Kabel

Kabel terhubung ke Bata sebagai berikut:

  • Port B: kiri motor besar.
  • Port C: motor besar kanan.
  • Port 2: sensor ultrasonik.
  • Port 3: sensor warna.
  • Port 4: sensor inframerah.

Langkah 11: Langkah Terakhir dalam Membangun Robot: Dekorasi

Langkah Terakhir dalam Membangun Robot: Dekorasi
Langkah Terakhir dalam Membangun Robot: Dekorasi
Langkah Terakhir dalam Membangun Robot: Dekorasi
Langkah Terakhir dalam Membangun Robot: Dekorasi

Sayap dan sirip hanya untuk hiasan.

Langkah 12: Bangun Labirin

Membangun Labirin
Membangun Labirin
Membangun Labirin
Membangun Labirin

Dua karton karton bergelombang harus cukup untuk labirin. Saya membuat dinding labirin setinggi 5 inci (12,5 cm), tetapi 4 inci (10 cm) akan berfungsi dengan baik jika Anda kekurangan karton bergelombang.

Pertama, saya memotong dinding karton, 10 inci (25 cm) dari bawah. Lalu saya memotong sekitar dinding 5 inci dari bawah. Ini menyediakan beberapa dinding 5 inci. Juga, saya memotong di sekitar bagian bawah karton, menyisakan sekitar 2,5 cm (2,5 cm) yang menempel pada dinding untuk stabilitas.

Berbagai potongan dapat dipotong dan direkatkan atau direkatkan di mana pun diperlukan untuk membentuk labirin. Harus ada jarak 11 atau 12 inci (30 cm) antara dinding samping di setiap jalan dengan jalan buntu. Panjangnya tidak boleh kurang dari 10 inci (25 cm). Jarak tersebut diperlukan agar robot dapat berputar.

Beberapa sudut labirin mungkin perlu diperkuat. Juga, beberapa dinding lurus harus dijaga agar tidak tertekuk jika memiliki sudut karton yang diluruskan. Potongan-potongan kecil karton tipis harus direkatkan ke bagian bawah di tempat-tempat itu, seperti yang ditunjukkan.

Pintu keluar memiliki penghalang merah yang terdiri dari setengah amplop kartu ucapan merah dan alas yang terbuat dari 2 lembar karton tipis, seperti yang ditunjukkan.

Langkah 13: Labirin

Labirin
Labirin

Satu peringatan adalah bahwa labirin tidak boleh besar. Jika belokan robot sedikit miring dari yang benar, perbedaan bertambah setelah beberapa belokan dan robot bisa menabrak dinding. Saya harus bermain-main beberapa kali dengan pengaturan Rotasi belokan untuk mendapatkan drive yang sukses bahkan melalui labirin kecil yang saya buat.

Cara mengatasi masalah itu adalah dengan memasukkan rutinitas pelurusan jalur yang akan menjaga jarak tertentu dari robot dari dinding kiri. Saya tidak menyertakan ini. Program ini cukup rumit, dan cukup untuk mendemonstrasikan konsep AI dalam proyek ini.

UCAPAN PENUTUP

Ini adalah proyek yang menyenangkan dan pengalaman belajar yang luar biasa. Saya harap Anda juga menganggapnya menarik.

Direkomendasikan: