Daftar Isi:

Robot Otonom Wallace - Bagian 4 - Tambahkan Jarak IR dan Sensor "Amp": 6 Langkah
Robot Otonom Wallace - Bagian 4 - Tambahkan Jarak IR dan Sensor "Amp": 6 Langkah

Video: Robot Otonom Wallace - Bagian 4 - Tambahkan Jarak IR dan Sensor "Amp": 6 Langkah

Video: Robot Otonom Wallace - Bagian 4 - Tambahkan Jarak IR dan Sensor
Video: Karl Friston: Prinsip Energi Bebas "Meta" [BAGIAN 1!] 2024, Juli
Anonim
Image
Image
Tambahkan Sirkuit Pendukung (MCP3008)
Tambahkan Sirkuit Pendukung (MCP3008)

Halo, hari ini kita memulai fase berikutnya untuk meningkatkan kemampuan Wallace. Secara khusus, kami mencoba meningkatkan kemampuannya untuk mendeteksi dan menghindari rintangan menggunakan sensor jarak inframerah, dan juga memanfaatkan kemampuan pengontrol motor Roboclaw untuk memantau arus dan mengubahnya menjadi "sensor" virtual (perangkat lunak). Terakhir, kita akan melihat bagaimana navigasi tanpa SLAM (lokasi dan pemetaan simultan) (untuk saat ini), karena robot belum memiliki sensor IMU (unit pengukuran inersia) atau ToF (waktu terbang).

Dengan navigasi, awalnya hanya akan menjadi dua tujuan utama:

  1. menghindari rintangan
  2. mengenali ketika macet di suatu tempat dan tidak membuat kemajuan apa pun. ("kemajuan" berarti apakah itu bergerak maju dalam jarak yang berarti)
  3. kemungkinan tujuan ke-3 adalah untuk mencoba menyelaraskan diri dengan tepat ke dinding.

Proyek ini dimulai dengan kit robot dan mendapatkan gerakan dasar untuk bekerja menggunakan keyboard dan koneksi ssh.

Tahap kedua adalah menambahkan sirkuit pendukung yang cukup untuk mempersiapkan penambahan banyak sensor.

Dalam Instruksi sebelumnya, kami menambahkan beberapa sensor akustik HCSR04 dan robot sekarang dapat menghindari rintangan saat bergerak di sekitar apartemen.

Sementara itu bekerja dengan baik di dapur dan lorong dengan permukaan datar yang bagus dan kokoh, itu benar-benar buta ketika mendekati ruang makan. Ia tidak bisa “melihat” kaki meja dan kursi.

Salah satu perbaikan dapat melacak arus motor yang khas, dan jika nilainya melompat, maka robot pasti menabrak sesuatu. Ini adalah "rencana B" atau bahkan C yang bagus. Tapi itu tidak benar-benar membantunya bernavigasi di sekitar ruang makan.

(Pembaruan: sebenarnya, untuk saat ini, pemantauan arus adalah rencana A saat membalikkan karena saya telah melepas sementara dan sensor dari belakang).

Video untuk bagian ini merupakan tahap akhir dari sensor penghindaran rintangan.

Apa yang Anda lihat dalam video adalah enam sensor akustik HCSR04 depan, dan dua sensor IR Sharp. Sensor IR tidak banyak berperan dalam video. Keahlian mereka sebagian besar ketika robot menemukan dirinya di ruang makan menghadap meja dan kaki kursi.

Selain sensor, monitor saat ini ikut bermain terutama saat membalikkan, jika menabrak sesuatu.

Akhirnya, ini menggunakan sejarah dari 100 gerakan terakhir, dan beberapa analisis dasar untuk menjawab satu pertanyaan:

"Apakah baru-baru ini ada kemajuan nyata (atau terjebak dalam tarian berulang)?"

Jadi dalam video ketika Anda melihat pengulangan maju-mundur, lalu ternyata, itu berarti mengenali pola maju-mundur, sehingga mencoba sesuatu yang lain.

Satu-satunya tujuan terprogram dari versi perangkat lunak ini adalah mencoba membuat kemajuan terus-menerus, dan mencoba menghindari rintangan.

Langkah 1: Tambahkan Sirkuit Pendukung (MCP3008)

Tambahkan Sirkuit Pendukung (MCP3008)
Tambahkan Sirkuit Pendukung (MCP3008)
Tambahkan Sirkuit Pendukung (MCP3008)
Tambahkan Sirkuit Pendukung (MCP3008)
Tambahkan Sirkuit Pendukung (MCP3008)
Tambahkan Sirkuit Pendukung (MCP3008)

Sebelum kita dapat menambahkan sensor IR, kita memerlukan sirkuit antarmuka antara mereka dan Raspberry Pi.

Kami akan menambahkan konverter analog-ke-digital MCP3008. Ada banyak sumber online bagaimana menghubungkan chip ini ke Raspberry Pi, jadi saya tidak akan membahasnya di sini.

Intinya, kita punya pilihan. Jika versi sensor IR beroperasi pada 3V, begitu juga MCP3008, dan kita dapat langsung terhubung ke Raspberry.

[Sensor IR 3V] - [MCP3008] -- [Raspberry Pi]

Dalam kasus saya, bagaimanapun, saya menjalankan sebagian besar 5V, jadi itu berarti shifter level dua arah.

[Sensor IR 5V] -- [MCP3008] -- [bus dua arah 5V-ke-3V] -- [Raspberry Pi]

Catatan: Hanya ada satu sinyal keluaran dari sensor IR. Ini langsung menuju ke salah satu jalur sinyal analog input MCP3008. Dari MCP3008, ada 4 jalur data yang perlu kita hubungkan (melalui bus dua arah) ke Raspberry Pi.

Saat ini, robot kami akan berjalan hanya menggunakan dua sensor IR, tetapi kami dapat dengan mudah menambahkan lebih banyak. MCP3008 delapan saluran input analog.

Langkah 2: Pasang Sensor IR

Pasang Sensor IR
Pasang Sensor IR
Pasang Sensor IR
Pasang Sensor IR
Pasang Sensor IR
Pasang Sensor IR
Pasang Sensor IR
Pasang Sensor IR

Sharp membuat beberapa sensor IR yang berbeda, dan mereka memiliki jangkauan dan area cakupan yang berbeda. Kebetulan saya sudah order model GP2Y0A60SZLF. Model yang Anda pilih akan memengaruhi penempatan dan orientasi sensor. Sayangnya bagi saya, saya tidak benar-benar meneliti sensor mana yang akan saya dapatkan. Itu lebih merupakan keputusan "mana yang bisa saya dapatkan pada waktu & harga yang wajar dari sumber yang memiliki reputasi baik, dari yang mereka tawarkan".

(Pembaruan: Namun, itu mungkin tidak masalah, karena sensor ini tampaknya dibingungkan oleh pencahayaan sekitar interior. Saya masih mengeksplorasi masalah itu)

Setidaknya ada tiga cara untuk memasang sensor ini pada robot.

  1. Tempatkan mereka dalam posisi tetap, di depan, agak jauh dari satu sama lain.
  2. Tempatkan mereka ke servo, di depan, menghadap sedikit menjauh satu sama lain.
  3. Tempatkan mereka dalam posisi tetap, di depan, tetapi di sudut paling kiri dan paling kanan, miring satu sama lain.

Dalam membandingkan pilihan #1 dengan pilihan #3, saya pikir #3 akan mencakup lebih banyak area tabrakan. Jika Anda melihat pada gambar, pilihan #3 dapat dilakukan tidak hanya agar bidang sensor tumpang tindih, tetapi juga dapat menutupi bagian tengah dan di luar lebar luar robot.

Dengan pilihan #1, semakin jauh jarak sensor satu sama lain, semakin banyak titik buta di tengah.

Kita bisa melakukan #2, (saya menambahkan beberapa gambar dengan servo sebagai kemungkinan) dan meminta mereka melakukan sapuan, dan jelas ini dapat mencakup sebagian besar area. Namun, saya ingin menunda penggunaan servo selama mungkin, setidaknya karena dua alasan:

  • Kami akan menggunakan salah satu saluran komunikasi PWM di Raspberry Pi. (Dimungkinkan untuk meningkatkan ini tapi tetap saja…)
  • Pengundian saat ini dengan servo bisa menjadi signifikan
  • Itu menambahkan lebih banyak ke perangkat keras dan perangkat lunak

Saya ingin meninggalkan opsi servo untuk nanti saat menambahkan sensor yang lebih penting, seperti Time-of-Flight (ToF), atau mungkin kamera.

Ada satu kemungkinan keuntungan lain dengan pilihan #2 yang tidak tersedia dengan dua pilihan lainnya. Sensor IR ini dapat menjadi bingung, tergantung pada pencahayaan. Bisa jadi robot mendapatkan pembacaan objek yang dekat padahal sebenarnya tidak ada objek yang dekat. Dengan pilihan # 3, karena bidangnya dapat tumpang tindih, kedua sensor dapat mendaftarkan objek yang sama (dari sudut yang berbeda).

Jadi kita akan pergi dengan pilihan penempatan #3.

Langkah 3: Saatnya Menguji

Image
Image

Setelah kami membuat semua koneksi antara Raspberry Pi, MCP3008 ADC, dan sensor Sharp IR, saatnya untuk menguji. Hanya tes sederhana untuk memastikan sistem bekerja dengan sensor baru.

Seperti pada Instructables sebelumnya, saya menggunakan library wiringPi C sebanyak mungkin. Membuat segalanya lebih mudah. Sesuatu yang tidak terlalu jelas dari meninjau situs web wiringPi, adalah bahwa ada dukungan langsung untuk MCP3004/3008.

Bahkan tanpa itu, Anda bisa menggunakan ekstensi SPI. Tapi tidak perlu. Jika Anda melihat lebih dekat pada repositori git Gordon untuk wiringPi, Anda akan menemukan daftar chip yang didukung, salah satunya adalah untuk MCP3004/3008.

Saya memutuskan untuk melampirkan kode sebagai file karena saya tidak bisa menampilkannya dengan benar di halaman ini.

Langkah 4: Sensor Virtual - AmpSensor

Semakin banyak cara agar robot menerima informasi tentang dunia luar, semakin baik.

Robot saat ini memiliki delapan sensor sonar akustik HCSR04 (mereka bukan fokus dari Instruksi ini), dan sekarang memiliki dua sensor jarak Sharp IR. Seperti yang dinyatakan sebelumnya, kita dapat memanfaatkan hal lain: fitur penginderaan arus motor Roboclaw.

Kita dapat membungkus panggilan kueri itu ke pengontrol motor ke dalam kelas C++ dan menyebutnya sebagai AmpSensor.

Dengan menambahkan beberapa "pintar" ke perangkat lunak, kita dapat memantau dan menyesuaikan penarikan arus yang khas selama gerakan lurus (maju, mundur), dan juga gerakan rotasi (kiri, kanan). Setelah kita mengetahui kisaran amp tersebut, kita dapat memilih nilai kritis, sehingga jika AmpSensor mendapat pembacaan arus dari pengontrol motor yang melebihi nilai ini, kita tahu motor mungkin terhenti, dan itu biasanya menunjukkan bahwa robot telah menabrak menjadi sesuatu.

Jika kita menambahkan beberapa fleksibilitas pada perangkat lunak (args baris perintah, dan/atau input keyboard selama operasi), maka kita dapat menambah / mengurangi ambang "critical-amps" saat kita bereksperimen dengan membiarkan robot bergerak dan menabrak objek, baik lurus ke dalam, atau sambil berputar.

Karena bagian navigasi perangkat lunak kami mengetahui arah gerakan, kami dapat menggunakan semua informasi itu untuk mungkin, menghentikan gerakan, dan mencoba membalikkan gerakan untuk beberapa saat sebelum mencoba sesuatu yang lain.

Langkah 5: Navigasi

Robot saat ini terbatas dalam umpan balik dunia nyata. Ini memiliki beberapa sensor jarak dekat untuk menghindari rintangan, dan memiliki teknik mundur untuk memantau penarikan arus jika sensor jarak melewatkan rintangan.

Itu tidak memiliki motor dengan encoder, dan tidak memiliki IMU (inersia-measurement-unit), sehingga lebih sulit untuk mengetahui apakah itu benar-benar bergerak atau berputar, dan berapa banyak.

Sementara seseorang bisa mendapatkan semacam indikasi jarak dengan sensor yang saat ini ada di robot, bidang pandangnya luas, dan ada ketidakpastian. Sonar akustik mungkin tidak memantulkan kembali dengan benar; inframerah dapat dikacaukan oleh pencahayaan lain, atau bahkan beberapa permukaan reflektif. Saya tidak yakin itu sepadan dengan kesulitan untuk benar-benar mencoba melacak perubahan jarak sebagai teknik untuk mengetahui apakah robot bergerak dan seberapa banyak dan ke arah mana.

Saya sengaja memilih untuk TIDAK menggunakan mikrokontroler seperti Arduino karena a) Saya tidak suka lingkungan psuedo-C++, b) dan terlalu banyak pengembangan akan menghabiskan memori baca-tulis (?), dan bahwa saya akan membutuhkan komputer host untuk mengembangkan (?). Atau mungkin saya kebetulan seperti Raspberry Pi.

Pi yang menjalankan Raspbian, bagaimanapun, bukanlah OS real-time, jadi antara ketidakstabilan sensor ini, dan OS yang tidak membaca setiap saat, saya merasa bahwa tujuan dari sensor ini lebih cocok untuk menghindari rintangan dan tidak pengukuran jarak sebenarnya.

Pendekatan itu tampak rumit dan dengan tidak begitu banyak manfaat, ketika kita dapat menggunakan sensor ToF (time-of-flight) yang lebih baik (nanti) untuk tujuan itu (SLAM).

Salah satu pendekatan yang dapat kita gunakan adalah dengan melacak beberapa perintah gerakan yang telah dikeluarkan dalam X detik atau perintah terakhir.

Sebagai contoh, katakanlah bahwa robot terjebak menghadap sudut secara diagonal. Satu set sensor memberi tahu bahwa itu terlalu dekat dengan satu dinding, jadi itu berputar, tetapi kemudian set sensor lainnya memberi tahu bahwa itu terlalu dekat dengan dinding lainnya. Itu akhirnya hanya mengulangi pola sisi-ke-sisi.

Contoh di atas hanyalah satu kasus yang sangat sederhana. Menambahkan beberapa kecerdasan mungkin hanya meningkatkan pola berulang ke tingkat yang baru, tetapi robot tetap terjebak di sudut.

Contoh, alih-alih berputar bolak-balik di tempat, ia berputar satu arah, melakukan kebalikan sesaat (yang kemudian menghapus indikasi jarak kritis), dan bahkan jika berputar ke arah lain, ia masih bergerak maju di beberapa sudut kembali ke sudut, mengulangi derai yang lebih rumit dari hal yang pada dasarnya sama.

Itu berarti kita benar-benar dapat menggunakan riwayat perintah, dan melihat bagaimana memanfaatkan dan menggunakan informasi itu.

Saya dapat memikirkan dua cara yang sangat mendasar (belum sempurna) dalam menggunakan sejarah gerakan.

  • untuk jumlah X terakhir, apakah mereka cocok dengan pola Y. Contoh sederhananya adalah (dan ini terjadi) "FOWARD, REVERSE, FORWARD, REVERSE, …..". Jadi ada fungsi pencocokan ini yang mengembalikan TRUE (pola ditemukan) atau FALSE (tidak ditemukan). Jika TRUE, di bagian navigasi program, coba urutan gerakan lainnya.
  • untuk jumlah X gerakan terakhir, apakah ada gerakan maju umum atau bersih. Bagaimana seseorang dapat menentukan apa itu gerakan maju yang sebenarnya? Nah.. salah satu perbandingan mudahnya adalah untuk gerakan X terakhir, "FORWARD" lebih sering terjadi daripada "REVERSE". Tapi itu tidak harus menjadi satu-satunya. Bagaimana dengan ini: "KANAN, KANAN, KIRI, KANAN". Dalam hal ini, robot harus berbelok ke kanan untuk keluar dari tikungan atau karena mendekati dinding dengan sudut tertentu, itu bisa dianggap kemajuan nyata. Di sisi lain, "KIRI, KANAN, KIRI, KANAN …" mungkin tidak dianggap kemajuan nyata. Jadi, jika "KANAN" terjadi lebih dari "KIRI", atau "KIRI terjadi lebih dari "KANAN", maka itu bisa menjadi kemajuan nyata.

Di awal Instructable ini, saya menyebutkan bahwa kemungkinan tujuan ke-3 dapat berupa mengkuadratkan atau menyelaraskan ke dinding. Untuk itu, bagaimanapun, kita membutuhkan lebih dari "apakah kita dekat dengan beberapa objek". Misalnya, jika kita bisa mendapatkan dua sensor akustik yang menghadap ke depan (bukan fokus artikel ini) untuk memberikan respons yang cukup baik dan stabil mengenai jarak, jelas jika salah satu melaporkan nilai yang jauh berbeda dari yang lain, robot telah mendekati dinding pada suatu sudut, dan dapat mencoba beberapa manuver untuk melihat apakah nilai-nilai itu saling mendekati (menghadap ke dinding dengan tepat).

Langkah 6: Pikiran Terakhir, Fase Selanjutnya…

Semoga Instructable ini memberi beberapa ide.

Menambahkan lebih banyak sensor memperkenalkan beberapa keuntungan, dan tantangan.

Dalam kasus di atas, semua sensor akustik bekerja sama dengan baik dan agak lurus ke depan dengan perangkat lunak.

Setelah sensor IR diperkenalkan ke dalam campuran, itu menjadi sedikit lebih menantang. Alasannya adalah bahwa beberapa bidang pandangnya tumpang tindih dengan bidang pandang sensor akustik. Sensor IR tampak agak sensitif dan tidak dapat diprediksi dengan perubahan kondisi cahaya sekitar, sedangkan tentu saja sensor akustik tidak terpengaruh oleh pencahayaan.

Jadi tantangannya adalah apa yang harus dilakukan jika sensor akustik memberi tahu kita bahwa tidak ada hambatan, tetapi sensor IR.

Untuk saat ini, setelah coba-coba, semuanya berakhir dalam prioritas ini:

  1. amp-sensing
  2. penginderaan IR
  3. penginderaan akustik

Dan yang saya lakukan hanyalah menurunkan sensitivitas sensor IR, sehingga mereka hanya akan mendeteksi objek yang sangat dekat (seperti kaki kursi yang akan segera datang)

Sejauh ini, belum ada kebutuhan untuk melakukan multi-threading atau perangkat lunak yang digerakkan oleh interupsi, meskipun saya kadang-kadang mengalami kehilangan kontrol antara Raspberry Pi dan pengontrol motor Roboclaw (kehilangan komunikasi serial).

Di sinilah sirkuit E-Stop (lihat Instruksi sebelumnya) biasanya mulai digunakan. Namun, karena saya tidak mau (belum) harus berurusan dengan harus mengatur ulang Roboclaw selama pengembangan, dan robot tidak berjalan secepat itu, dan saya hadir untuk memantau dan mematikannya, saya belum melakukannya. menghubungkan E-Stop.

Akhirnya, multi-threading kemungkinan besar akan diperlukan.

Langkah selanjutnya…

Terima kasih telah berhasil sejauh ini.

Saya memperoleh beberapa sensor VL53L1X IR laser ToF (time-of-flight), jadi kemungkinan besar itulah topik Instructable berikutnya, bersama dengan servo.

Direkomendasikan: