Mobot#

Artikel oleh Cosku Acay, Edwin Cho, Kenneth Li, dan Nishant Pol. PDF.

Deskripsi Proyek#

Dalam kompetisi Mobot Carnegie Mellon, robot harus melewati serangkaian 14 gerbang yang ditempatkan di atas garis putih melengkung sepanjang 255 kaki di trotoar luar ruangan. Lintasan ini mencakup dua tanjakan curam dan area titik keputusan di mana robot harus memilih rute yang benar untuk melewati 14 gerbang secara berurutan. Karena garis berada di luar ruangan dan di bawah cuaca Pittsburgh, robot harus berfungsi dalam berbagai kondisi. Tahun ini hujan dan berangin pada hari kompetisi. Informasi lebih lanjut dapat ditemukan di http://www.cs.cmu.edu/mobot/mobot.html

Mobot Mobot

Mobot (full size)Mobot (full size)

Solusi dengan CMUcam4#

Kami memilih untuk mendekati tugas pengikutan garis menggunakan CMUcam4 karena memerlukan perangkat keras minimal dan memiliki antarmuka yang sangat cocok untuk melacak garis.

Mobot hardware Mobot hardware (full size)

CMUcam4 menangkap gambar garis pada 30 frame per detik dan mengumpankan gambar pelacakan warna ke Arduino Mega melalui salah satu dari tiga jalur Serial. Arduino Mega kemudian memproses gambar ini (silakan lihat Deskripsi Perangkat Lunak di bawah) dan mengirimkan perintah kecepatan motor dan belokan ke pengendali PID melalui jalur Serial lainnya. Pengendali PID pada gilirannya memberikan Arduino Mega hitungan encoder untuk roda kanan dan kiri, yang memungkinkan kami melacak posisi dan arah hadap kami relatif terhadap gerbang 0.

Pengendali PID (MD-25) dibuat oleh Robot-Electronics di Inggris. Ia menggerakkan dua motor sikat DC bergigi dengan encoder magnetik poros motor. Layar LCD digunakan untuk keperluan debug. Kami memiliki dua rel daya, 12V untuk motor dan 5V untuk logika, berbagi ground yang sama dan keduanya bersumber dari satu baterai isi ulang 12V.

Kami awalnya berencana membuat prototipe dari basis kayu untuk membawa kami ke fase pemrograman dengan cepat, kemudian mengerjakan basis yang lebih cepat dan lebih andal seperti mobil RC. Namun, kami menemukan bahwa prototipe sangat andal dan mudah untuk dikerjakan, jadi kami mempertahankannya untuk desain akhir. Kedap air untuk bodi terdiri dari lapisan pembungkus selofan di bawah lapisan selotip pengemasan. Namun hujan bocor melalui selotip pengemasan tetapi untungnya tidak melalui pembungkus selofan. Kamera ditutupi oleh sepotong plastik persegi dari kantong Ziploc karena kami menemukan bahwa "filter" tersebut meningkatkan kemampuan kamera untuk mengabaikan bercak-bercak kecil garis yang, bagi kamera, terlihat seperti beton latar belakang.

Deskripsi Algoritma#

Latar Belakang#

Kami menggunakan CMUcam4 dalam mode pelacakan warna dengan mode YUV diaktifkan, yang memberi kami representasi gambar biner dari garis. Perangkat lunak kamera menyaring apa pun yang bukan putih (mis. latar belakang) dan menempatkan piksel "on" di mana ada garis (di mana itu putih). Kami menggunakan mode YUV sehingga pelacakan warna tidak peka terhadap intensitas cahaya, sehingga robot kami dapat berfungsi dalam berbagai kondisi termasuk dalam dan luar ruangan.

Pengikutan Garis#

CMUcam4 memberikan chip Arduino kami gambar biner 80 kali 60. Kami mengambil sampel 10 baris piksel berjarak sama dari gambar dan menghitung centroid dari piksel "on" (lihat di sini: https://en.wikipedia.org/wiki/Centroid#Of_a_finite_set_of_points). Kami kemudian mengasumsikan bahwa garis terletak pada centroid. Dengan melakukan ini pada 10 baris berbeda dalam gambar, kami mendapatkan aproksimasi yang baik dari garis dengan menghubungkan titik-titik. Kami kemudian dapat menggunakan data ini dengan mencari seberapa jauh setiap titik pada garis dari garis vertikal yang terletak di pusat gambar untuk mendapatkan nilai yang mewakili seberapa melengkung garis tersebut. Ini dapat dilihat seperti mencari luas antara garis singgung dan sebuah kurva dan menggunakan luas itu untuk menentukan seberapa banyak kami perlu berbelok. Tanda menentukan apakah belokan ke kiri atau kanan, sementara besarnya menentukan seberapa banyak kami perlu berbelok untuk mengikuti garis. Seperti yang Anda duga, jika kami mengukur luas nol, maka garis tepat berada di depan robot dan merupakan garis lurus. Jika besarnya luas besar, maka robot perlu berbelok untuk mempertahankan upaya meminimalkan besarnya luas ini.

Titik Keputusan#

Untuk menentukan apakah robot berada di titik keputusan, kami mengambil data yang dikumpulkan kamera dari pengikutan garis dan memeriksa berapa banyak titik pusat rata-rata yang muncul di ruang hitam. Ini bekerja berdasarkan asumsi bahwa titik rata-rata antara dua garis seharusnya tidak berada di salah satu garis, kecuali jika garis-garis tersebut adalah garis yang sama. Jika robot mendeteksi beberapa titik rata-rata di ruang hitam, ia dapat menyimpulkan bahwa pasti ada dua garis di sini. Kemudian ia memilih belokan yang sesuai dan membiaskan belokannya ke arah itu sampai ia hanya melihat satu garis.

Silakan kunjungi https://github.com/cacay/Mobot untuk melihat versi sederhana dari kode kami atau di sini untuk salinan lokal.