Isi kandungan:

AI dalam Robot Memandu Maze LEGO EV3: 13 Langkah
AI dalam Robot Memandu Maze LEGO EV3: 13 Langkah

Video: AI dalam Robot Memandu Maze LEGO EV3: 13 Langkah

Video: AI dalam Robot Memandu Maze LEGO EV3: 13 Langkah
Video: 13. How to make our LEGO EV3 robot go backwards. 2024, Julai
Anonim
Image
Image
Bagaimana Maze Diselesaikan
Bagaimana Maze Diselesaikan

Ini adalah robot sederhana dan autonomi dengan sedikit kepintaran buatan. Ia dirancang untuk menjelajahi labirin dan ketika ditempatkan kembali di pintu masuk, untuk memandu melalui jalan keluar dan menghindari jalan buntu. Ia jauh lebih rumit daripada projek saya sebelumnya, yang hanya berjalan melalui labirin. Di sini, robot mesti mengingat jalan yang dilaluinya, membuang jalan buntu, menyimpan jalan baru, dan kemudian mengikuti jalan baru.

Robot saya sebelumnya dijelaskan di sini:

Robot ini dibina menggunakan LEGO Mindstorms EV3. Perisian EV3 berjalan di komputer dan menghasilkan program, yang kemudian dimuat turun ke mikrokontroler yang disebut Bata EV3. Kaedah pengaturcaraan adalah berasaskan ikon dan tahap tinggi. Ia sangat mudah dan serba boleh.

Bekalan

BAHAGIAN

  1. Set LEGO Mindstorms EV3
  2. Sensor ultrasonik LEGO Mindstorms EV3. Itu tidak termasuk dalam set EV3.
  3. Kadbod bergelombang untuk labirin. Dua kadbod mesti mencukupi.
  4. Sekeping kadbod nipis kecil untuk menstabilkan beberapa sudut dan dinding.
  5. Lekatkan dan pita untuk menyambungkan kepingan kadbod.
  6. Sampul surat ucapan berwarna merah untuk mengenal pasti pintu keluar labirin.

ALAT

  1. Pisau utiliti untuk memotong kadbod.
  2. Pembaris keluli untuk membantu proses pemotongan.

PERISIAN

Program ini ada di sini:

Langkah 1: Bagaimana Maze Diselesaikan

KAEDAH PEMANDU MAZE

Terdapat beberapa kaedah menavigasi labirin. Sekiranya anda berminat untuk mempelajarinya, mereka dijelaskan dengan baik dalam artikel Wikipedia berikut:

Saya memilih kaedah berikut dinding kiri. Ideanya adalah bahawa robot akan menyimpan dinding di sebelah kirinya dengan membuat keputusan berikut semasa berjalan melalui labirin:

  1. Sekiranya boleh membelok ke kiri, lakukanlah.
  2. Jika tidak, jalan terus jika boleh.
  3. Sekiranya tidak boleh ke kiri atau lurus, belok kanan, jika boleh.
  4. Sekiranya tiada perkara di atas mungkin berlaku, ini mesti jalan buntu. Pusing.

Satu kehati-hatian adalah bahawa kaedah ini akan gagal jika labirin memiliki lingkaran di dalamnya. Bergantung pada penempatan gelung, robot dapat terus berputar dan berkeliling. Penyelesaian yang mungkin berlaku untuk masalah ini ialah robot beralih ke peraturan pengikut dinding kanan jika menyedari bahawa ia akan berjalan dalam satu gelung. Saya tidak memasukkan penyempurnaan ini dalam projek saya.

MENYELESAIKAN MAZE UNTUK MENCARI PATH LANGSUNG

Semasa memandu melalui labirin, robot mesti menghafal jalan yang dilaluinya dan menghilangkan jalan buntu. Ia menyelesaikannya dengan menyimpan setiap giliran dan persimpangan dalam satu array, memeriksa kombinasi giliran dan persimpangan tertentu semasa berjalan, dan menggantikan kombinasi yang merangkumi jalan buntu. Senarai akhir selekoh dan persimpangan adalah jalan langsung melalui labirin.

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

Kombinasi diganti seperti berikut:

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

BAGAIMANA ROBOT MENANGANI MAZE SAYA

  1. Ketika robot mula memandu, ia melihat ruang di sebelah kanan dan menyimpan Lurus dalam senarai dalam array.
  2. Kemudian ia membelok ke kiri dan menambahkan Kiri ke senarai. Senarai sekarang mengandungi: Lurus, Kiri.
  3. Dengan jalan buntu, ia berbalik dan menambah Kembali ke senarai. Senarai sekarang mengandungi: Lurus, Kiri, Belakang.
  4. Melewati lorong yang digunakannya dari pintu masuk, ia menambah Lurus ke senarai. Senarai sekarang mengandungi: Lurus, Kiri, Belakang, Lurus. Ia mengenali gabungan dan menukar Kiri, Belakang, Lurus ke Kanan. Senarai sekarang mengandungi Straight, Right.
  5. Dengan jalan buntu, ia berbalik dan menambah Kembali ke senarai. Senarai sekarang mengandungi: Lurus, Kanan, Belakang.
  6. Selepas belokan kiri senarai mengandungi Lurus, Kanan, Belakang, Kiri. Ia menyedari gabungan dan berubah Kanan, Belakang, Kiri ke Belakang. Senarai sekarang mengandungi Straight, Back.
  7. Selepas belokan kiri seterusnya senarai mengandungi Lurus, Belakang, Kiri. Ia mengubah kombinasi itu menjadi Kanan. Senarai sekarang hanya mengandungi Kanan.
  8. Ia melewati ruang dan menambah Lurus ke senarai. Senarai sekarang mengandungi Kanan, Lurus.
  9. Setelah belok kanan senarai mengandungi Kanan, Lurus, Kanan yang merupakan jalan langsung.

Langkah 2: Pertimbangan Semasa Memprogram Robot

PERTIMBANGAN UNTUK SETIAP MICROCONTROLLER

Apabila robot memutuskan untuk membelok, ia harus membuat putaran lebar, atau maju jarak pendek sebelum membelok dan setelah membelok ke depan jarak pendek lagi tanpa memeriksa sensor. Sebab jarak pendek pertama adalah bahawa robot tidak boleh menabrak dinding setelah belokan, dan alasan untuk jarak pendek kedua adalah kerana setelah robot berpusing, sensor akan melihat ruang panjang yang baru saja ia datang, dan robot akan berfikir ia harus berpusing lagi, yang bukan perkara yang wajar dilakukan.

Apabila robot merasakan persimpangan di sebelah kanan tetapi bukan belokan yang tepat, saya mendapati ada baiknya robot bergerak ke hadapan sekitar 10 inci (25 cm) tanpa memeriksa sensornya.

PERTIMBANGAN KHAS UNTUK LEGO MINDSTORMS EV3

Walaupun LEGO Mindstorms EV3 sangat serba boleh, ia membolehkan tidak lebih daripada satu jenis sensor yang disambungkan ke satu Bata. Dua atau lebih Batu Bata mungkin dirantai daisy, tetapi saya tidak mahu membeli Bata lain, jadi saya menggunakan sensor berikut (bukannya tiga sensor ultrasonik): sensor inframerah, sensor warna, dan sensor ultrasonik. Ini berjaya dengan baik.

Tetapi sensor warna mempunyai jarak yang sangat pendek, sekitar 2 inci (5 cm), yang membawa kepada beberapa pertimbangan khas seperti yang dijelaskan di bawah:

  1. Apabila sensor warna mengesan dinding di depan dan robot memutuskan untuk membelok ke kanan atau berbalik, ia harus menyandarkan terlebih dahulu, untuk memberi ruang yang cukup untuk berpusing tanpa menabrak dinding.
  2. Masalah yang rumit berlaku dengan beberapa persimpangan "Lurus". Kerana jarak pendek sensor warna, robot tidak dapat menentukan apakah ia merasakan persimpangan "Lurus" yang tepat atau mengarah ke belokan kanan. Saya telah berusaha menyelesaikan masalah ini dengan menetapkan program untuk menyimpan "Straight" dalam senarai setiap kali robot merasakannya, dan kemudian menghilangkan lebih dari satu "Straight" berturut-turut dalam senarai. Ini memperbaiki keadaan di mana giliran kanan mengikuti "Lurus" di labirin tetapi bukan situasi di mana terdapat belokan kanan tanpa "Lurus" di depannya. Saya juga cuba mengatur program untuk menghilangkan "Lurus" jika sebelum "Kanan" tetapi ini tidak akan berfungsi jika belok kanan mengikuti "Lurus". Saya belum dapat mencari penyelesaian yang sesuai dengan semua kes, walaupun saya rasa mungkin robot dapat melihat jarak yang dilalui (dengan membaca sensor putaran motor) dan memutuskan sama ada ia adalah "Lurus" atau yang betul giliran. Saya rasa komplikasi ini tidak wajar dilakukan untuk menunjukkan konsep AI dalam projek ini.
  3. Kelebihan sensor warna ialah ia membezakan antara warna coklat dinding dan warna merah penghalang yang saya gunakan di pintu keluar, dan memberikan cara yang mudah bagi robot untuk memutuskan kapan ia selesai labirin.

Langkah 3: Program Utama

Program Utama
Program Utama

LEGO Mindstorms EV3 mempunyai kaedah pengaturcaraan berasaskan ikon yang sangat mudah. Blok ditunjukkan di bahagian bawah layar paparan di komputer dan dapat diseret dan diturunkan ke tetingkap pengaturcaraan untuk membina program. Bata EV3 dapat disambungkan ke komputer dengan kabel USB, Wi-Fi atau Bluetooth, dan program kemudian boleh dimuat turun dari komputer ke Bata.

Program ini terdiri daripada program utama dan beberapa "Blokku" yang merupakan subrutin. Fail yang dimuat naik mengandungi keseluruhan program, yang ada di sini:

Langkah-langkah dalam program utama adalah seperti berikut:

  1. Tentukan dan mulakan pemboleh ubah membilang giliran dan susunan.
  2. Tunggu 5 saat dan sebut "Pergi".
  3. Mulakan gelung.
  4. Pandu melalui labirin. Apabila jalan keluar dicapai, gelung keluar.
  5. Paparkan di skrin Batu Bata, persimpangan yang terdapat di labirin sejauh ini.
  6. Periksa sama ada jalan tersebut harus dipendekkan.
  7. Paparkan persimpangan di jalan yang dipendekkan.
  8. Kembali ke langkah 4.
  9. Selepas gelung, pandu jalan langsung.

Tangkapan skrin menunjukkan program utama ini.

Langkah 4: Blok Saya (Subrutin)

Blok Saya (Subrutin)
Blok Saya (Subrutin)

Navigate My Block, yang mengawal bagaimana robot bergerak melalui labirin, ditunjukkan. Cetakannya sangat kecil dan mungkin tidak dapat dibaca. Tetapi ini adalah contoh yang baik tentang betapa serba boleh dan kuatnya pernyataan if (disebut Switches dalam sistem LEGO EV3).

  1. Anak panah # 1 menunjuk ke Suis yang memeriksa apakah sensor inframerah melihat objek lebih dari jarak tertentu. Sekiranya demikian, rangkaian blok teratas dilaksanakan. Sekiranya tidak, maka kawalan diserahkan ke rangkaian blok besar yang paling bawah, di mana anak panah # 2 berada.
  2. Anak panah # 2 menunjuk ke Suis yang memeriksa warna apa yang dilihat oleh sensor warna. Terdapat 3 kes: tidak ada warna di bahagian atas, merah di tengah, dan coklat di bahagian bawah.
  3. Dua anak panah # 3 menunjuk ke Switch yang memeriksa apakah sensor ultrasonik melihat objek lebih dari jarak tertentu. Sekiranya demikian, rangkaian blok teratas dilaksanakan. Sekiranya tidak, kawalan diserahkan ke rangkaian blok bawah.

Blok Saya untuk memendekkan jalan dan untuk memandu jalan langsung lebih rumit dan sama sekali tidak dapat dibaca, dan oleh itu ia tidak termasuk dalam dokumen ini.

Langkah 5: Mula Membina Robot: Pangkalan

Mula Membina Robot: Pangkalan
Mula Membina Robot: Pangkalan
Mula Membina Robot: Pangkalan
Mula Membina Robot: Pangkalan

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

Pasangan gambar di bawah menunjukkan cara membina robot. Foto pertama setiap pasangan menunjukkan bahagian yang diperlukan, dan foto kedua menunjukkan bahagian yang sama disatukan.

Langkah pertama adalah membina asas robot, menggunakan bahagian yang ditunjukkan. Pangkalan robot ditunjukkan terbalik. Bahagian kecil berbentuk L di bahagian belakang robot adalah sokongan untuk bahagian belakang. Ia meluncur ketika robot bergerak. Ini berfungsi dengan baik. Kit EV3 tidak mempunyai bahagian jenis rolling-ball.

Langkah 6: Bahagian Atas Pangkalan, 1

Bahagian Atas Pangkalan, 1
Bahagian Atas Pangkalan, 1
Bahagian Atas Pangkalan, 1
Bahagian Atas Pangkalan, 1

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

Langkah 7: Bahagian Atas Pangkalan, 2

Bahagian Atas Pangkalan, 2
Bahagian Atas Pangkalan, 2
Bahagian Atas Pangkalan, 2
Bahagian Atas Pangkalan, 2

Langkah 8: Bahagian Atas Pangkalan, 3

Bahagian Atas Pangkalan, 3
Bahagian Atas Pangkalan, 3
Bahagian Atas Pangkalan, 3
Bahagian 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

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

Sensor inframerah dan ultrasonik terletak secara menegak dan bukannya mendatar biasa. Ini memberikan pengenalan yang lebih baik mengenai sudut atau hujung dinding.

Langkah 10: Kabel

Kabel
Kabel

Kabel menyambung ke Bata seperti berikut:

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

Langkah 11: Langkah Akhir dalam Membangun Robot: Hiasan

Langkah Akhir dalam Membangun Robot: Dekorasi
Langkah Akhir dalam Membangun Robot: Dekorasi
Langkah Akhir dalam Membangun Robot: Dekorasi
Langkah Akhir dalam Membangun Robot: Dekorasi

Sayap dan sirip hanya untuk hiasan.

Langkah 12: Bina Labirin

Bina Maze
Bina Maze
Bina Maze
Bina Maze

Dua kadbod kadbod beralun harus mencukupi untuk labirin. Saya membuat dinding labirin setinggi 5 inci (12.5 cm), tetapi 4 inci (10 cm) harus berfungsi juga jika anda kekurangan kadbod bergelombang.

Pertama, saya memotong dinding kadbod, 10 inci (25 cm) dari bahagian bawah. Kemudian saya memotong dinding 5 inci dari bawah. Ini menyediakan beberapa dinding 5 inci. Juga, saya memotong bahagian bawah kadbod, meninggalkan kira-kira 1 inci (2.5 cm) melekat pada dinding untuk kestabilan.

Berbagai kepingan dapat dipotong dan dilekatkan atau ditempel di mana sahaja diperlukan untuk membentuk labirin. Harus ada ruang 11 atau 12 inci (30 cm) di antara dinding sisi di mana-mana jalan dengan jalan buntu. Panjangnya hendaklah tidak kurang dari 10 inci (25 cm). Jarak ini diperlukan untuk robot berpusing.

Sebilangan sudut labirin mungkin perlu diperkuat. Juga, beberapa dinding lurus perlu dijaga agar tidak membengkok jika merangkumi sudut kadbod yang diluruskan. Potongan kecil kadbod nipis harus dilekatkan ke bahagian bawah di tempat-tempat tersebut, seperti yang ditunjukkan.

Pintu keluar mempunyai penghalang merah yang terdiri daripada sampul surat kad ucapan berwarna merah dan alas yang terbuat dari 2 keping kadbod nipis, seperti yang ditunjukkan.

Langkah 13: Maze

Maze
Maze

Satu peringatan adalah bahawa labirin tidak boleh besar. Sekiranya giliran robot berada pada sudut sedikit dari yang betul, perbezaan akan bertambah setelah beberapa putaran dan robot dapat berlari ke dinding. Saya terpaksa bermain-main beberapa kali dengan tetapan putaran untuk mendapatkan pemanduan yang berjaya melalui labirin kecil yang saya buat.

Cara mengatasi masalah ini adalah dengan memasukkan rutin meluruskan jalan yang akan menjaga robot jarak tertentu dari dinding kiri. Saya tidak memasukkan ini. Program ini cukup rumit sebagaimana adanya, dan memadai untuk menunjukkan konsep AI dalam projek ini.

PENINGKATAN PENUTUP

Ini adalah projek yang menyeronokkan dan pengalaman pembelajaran yang hebat. Saya harap anda juga menganggapnya menarik.

Disyorkan: