Isi kandungan:

Robot Autonomi Wallace - Bahagian 4 - Tambahkan Jarak IR dan Sensor "Amp": 6 Langkah
Robot Autonomi Wallace - Bahagian 4 - Tambahkan Jarak IR dan Sensor "Amp": 6 Langkah

Video: Robot Autonomi Wallace - Bahagian 4 - Tambahkan Jarak IR dan Sensor "Amp": 6 Langkah

Video: Robot Autonomi Wallace - Bahagian 4 - Tambahkan Jarak IR dan Sensor
Video: 📺Top 10 Best Sci-Fi Series on Netflix in 2023 | Netflix Sci-Fi Shows to Watch 2024, Julai
Anonim
Image
Image
Tambah Litar Sokongan (MCP3008)
Tambah Litar Sokongan (MCP3008)

Halo, hari ini kita memulakan fasa seterusnya untuk meningkatkan kemampuan Wallace. Secara khusus, kami berusaha meningkatkan kemampuannya untuk mengesan dan menghindari rintangan menggunakan sensor jarak inframerah, dan juga memanfaatkan kemampuan pengendali motor Roboclaw untuk memantau arus dan mengubahnya menjadi "sensor" maya (perisian). Akhirnya, kita akan melihat bagaimana menavigasi tanpa SLAM (lokasi dan pemetaan serentak) (buat masa ini), kerana robot belum mempunyai sensor IMU (unit pengukuran inersia) atau ToF (waktu penerbangan).

Melalui navigasi, pada mulanya hanya dua tujuan utama:

  1. elakkan halangan
  2. kenali bila ia tersekat di suatu tempat dan tidak membuat kemajuan. ("kemajuan" bermaksud adakah ia bergerak ke depan dengan jarak yang bermakna)
  3. kemungkinan gol ke-3 adalah untuk mencuba meluruskan dirinya tepat ke dinding.

Projek ini dimulakan dengan robot kit dan membuat pergerakan asas berfungsi dengan menggunakan papan kekunci dan sambungan ssh.

Fasa kedua adalah menambahkan litar sokongan yang mencukupi untuk mempersiapkan penambahan banyak sensor.

Dalam Instructable sebelumnya, kami menambahkan beberapa sensor akustik HCSR04 dan robot kini dapat mengelakkan halangan ketika bergerak di sekitar apartmen.

Walaupun ia berfungsi dengan baik di dapur dan lorong dengan permukaan rata yang kukuh dan padat, ia benar-benar buta ketika menghampiri ruang makan. Ia tidak dapat "melihat" kaki meja dan kerusi.

Salah satu peningkatannya adalah dengan mengikuti arus arus motor yang khas, dan jika nilainya melonjak, maka robot pasti memukul sesuatu. Ini adalah "rancangan B" yang baik atau bahkan C. Tetapi itu tidak benar-benar membantunya menjelajahi kawasan makan.

(Kemas kini: sebenarnya, buat masa ini, pemantauan arus adalah rancangan A ketika mundur kerana saya telah mengeluarkan sementara dan sensor dari belakang).

Video untuk bahagian ini merupakan fasa terakhir sensor penghindaran halangan.

Apa yang anda lihat dalam video adalah enam sensor akustik HCSR04 depan, dan dua sensor Sharp IR. Sensor IR tidak banyak bermain dalam video. Keuntungan mereka kebanyakannya ketika robot itu berada di ruang makan menghadap kaki meja dan kerusi.

Sebagai tambahan kepada sensor, monitor semasa dimainkan terutamanya semasa membalikkan badan, sekiranya terpukul pada sesuatu.

Akhirnya, ia menggunakan sejarah 100 langkah terakhir, dan beberapa analisis asas untuk menjawab satu soalan:

"Adakah baru-baru ini ada kemajuan maju yang nyata (atau terjebak dalam tarian yang berulang)?"

Oleh itu, dalam video apabila anda melihat ke depan-mundur diulang, kemudian berpusing, itu bermaksud bahawa ia mengenali corak mundur ke depan, sehingga mencuba sesuatu yang lain.

Satu-satunya tujuan yang diprogramkan dari versi perisian ini adalah untuk berusaha membuat kemajuan maju yang berterusan, dan berusaha menghindari halangan.

Langkah 1: Tambahkan Litar Penyokong (MCP3008)

Tambah Litar Sokongan (MCP3008)
Tambah Litar Sokongan (MCP3008)
Tambah Litar Sokongan (MCP3008)
Tambah Litar Sokongan (MCP3008)
Tambah Litar Sokongan (MCP3008)
Tambah Litar Sokongan (MCP3008)

Sebelum kita dapat menambahkan sensor IR, kita memerlukan litar antara muka antara mereka dan Raspberry Pi.

Kami akan menambah penukar analog-ke-digital MCP3008. Terdapat banyak sumber dalam talian bagaimana menghubungkan cip ini ke Raspberry Pi, jadi saya tidak akan membahasnya di sini.

Pada dasarnya, kita mempunyai pilihan. Sekiranya versi sensor IR beroperasi pada 3V, begitu juga MCP3008, dan kita kemudian boleh terus menyambung ke Raspberry.

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

Walau bagaimanapun, dalam kes saya, saya menggunakan 5V, jadi ini bermaksud peralihan tahap dua arah.

[Sensor IR 5V] - [MCP3008] - [bas dwi arah 5V-ke-3V] - [Raspberry Pi]

Catatan: Hanya ada satu output isyarat dari sensor IR. Ia terus menuju ke salah satu jalur isyarat analog input MCP3008. Dari MCP3008, ada 4 baris data yang perlu kita sambungkan (melalui bas dua arah) ke Raspberry Pi.

Pada masa ini, robot kami akan berjalan menggunakan hanya dua sensor IR, tetapi kami dapat menambahkan lebih banyak lagi. Lapan saluran analog MCP3008.

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 berbeza, dan mereka mempunyai jarak dan kawasan liputan yang berbeza. Saya kebetulan telah memesan model GP2Y0A60SZLF. Model yang anda pilih akan mempengaruhi penempatan dan orientasi sensor. Malangnya bagi saya, saya tidak betul-betul meneliti sensor mana yang akan diperolehi. Ini lebih merupakan keputusan "yang mana yang dapat saya dapatkan pada waktu & harga yang wajar dari sumber yang bereputasi, daripada yang mereka tawarkan".

(Kemas kini: Namun, itu mungkin tidak penting, kerana sensor ini nampaknya keliru dengan pencahayaan persekitaran dalaman. Saya masih meneroka masalah itu)

Terdapat sekurang-kurangnya tiga cara untuk memasang sensor ini pada robot.

  1. Letakkan mereka dalam kedudukan tetap, di depan, menghadap sedikit dari satu sama lain.
  2. Letakkan mereka ke servo, di depan, menghadap sedikit dari satu sama lain.
  3. Letakkan mereka dalam kedudukan tetap, di depan, tetapi di sudut paling kiri dan paling kanan paling jauh, bersudut satu sama lain.

Dalam membandingkan pilihan # 1 dengan pilihan # 3, saya berpendapat bahawa # 3 akan merangkumi lebih banyak kawasan perlanggaran. Sekiranya anda melihat gambar, pilihan # 3 dapat dilakukan bukan hanya agar medan sensor bertindih, tetapi juga dapat menutupi tengah dan luar lebar robot.

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

Kami dapat melakukan # 2, (saya menambahkan beberapa gambar dengan servo sebagai kemungkinan) dan meminta mereka melakukan sapuan, dan jelas ini dapat meliputi kawasan yang paling banyak. Walau bagaimanapun, saya mahu menangguhkan penggunaan servo selama mungkin, sekurang-kurangnya dua sebab:

  • Kami akan menggunakan salah satu saluran komunikasi PWM di Raspberry Pi. (Mungkin untuk meningkatkan ini tetapi masih…)
  • Cabutan semasa dengan servo boleh menjadi ketara
  • Ia menambahkan lagi perkakasan dan perisian

Saya ingin meninggalkan pilihan servo untuk kemudian ketika menambah sensor yang lebih penting, seperti Time-of-Flight (ToF), atau mungkin kamera.

Terdapat satu kemungkinan kelebihan lain dengan pilihan # 2 yang tidak tersedia dengan dua pilihan yang lain. Sensor IR ini boleh menjadi bingung, bergantung pada pencahayaan. Mungkin robot mendapat pembacaan objek yang hampir tidak lama lagi sedangkan sebenarnya tidak ada objek dekat. Dengan pilihan # 3, kerana bidangnya dapat bertindih, kedua sensor dapat mendaftarkan objek yang sama (dari sudut yang berbeza).

Oleh itu, kami akan memilih pilihan penempatan # 3.

Langkah 3: Masa untuk Menguji

Image
Image

Setelah kami membuat semua hubungan antara Raspberry Pi, MCP3008 ADC, dan sensor Sharp IR, sudah tiba masanya untuk menguji. Hanya ujian mudah untuk memastikan sistem berfungsi dengan sensor baru.

Seperti Instructables sebelumnya, saya menggunakan perpustakaan wiringPi C sebanyak mungkin. Menjadikan perkara lebih mudah. Sesuatu yang tidak begitu jelas dari meninjau laman web wiringPi, adalah bahawa ada sokongan langsung untuk MCP3004 / 3008.

Walaupun tanpa itu, anda hanya boleh menggunakan pelanjutan SPI. Tetapi tidak perlu. Sekiranya anda melihat dengan dekat git repositori Gordon untuk wiringPi, anda akan menemui senarai cip yang disokong, salah satunya adalah untuk MCP3004 / 3008.

Saya memutuskan untuk melampirkan kod sebagai fail kerana saya tidak dapat memaparkannya dengan betul di halaman ini.

Langkah 4: Sensor Maya - AmpSensor

Semakin berbeza cara robot membuat maklumat mengenai dunia luar, semakin baik.

Robot ini kini mempunyai lapan sensor sonar akustik HCSR04 (mereka bukan fokus dari Instructable ini), dan kini ia mempunyai dua sensor jarak IR Sharp. Seperti yang dinyatakan sebelumnya, kita dapat memanfaatkan sesuatu yang lain: ciri pengesan arus motor Roboclaw.

Kita boleh memasukkan panggilan pertanyaan itu ke pengawal motor ke kelas C ++ dan memanggilnya sebagai AmpSensor.

Dengan menambahkan beberapa "kecerdasan" ke dalam perisian, kita dapat memantau dan menyesuaikan arus arus khas semasa pergerakan lurus (ke depan, ke belakang), dan juga pergerakan putaran (kiri, kanan). Setelah kita mengetahui julat amp, kita dapat memilih nilai kritikal, jadi jika AmpSensor mendapat bacaan semasa dari pengawal motor yang melebihi nilai ini, kita tahu motor mungkin terhenti, dan itu biasanya menunjukkan robot telah tersekat menjadi sesuatu.

Sekiranya kita menambahkan sedikit fleksibiliti pada perisian (argumen baris perintah, dan / atau input papan kekunci semasa operasi), maka kita dapat meningkatkan / menurunkan ambang "kritikal-amp" ketika kita bereksperimen dengan membiarkan robot bergerak dan menabrak objek, keduanya lurus masuk, atau semasa berpusing.

Oleh kerana bahagian perisian kami yang mengetahui arah tuju pergerakannya, kami mungkin menggunakan semua maklumat itu untuk menghentikan pergerakannya, dan cuba membalikkan pergerakan tersebut untuk jangka masa yang singkat sebelum mencuba sesuatu yang lain.

Langkah 5: Navigasi

Robot pada masa ini terhad dalam maklum balas dunia nyata. Ia memiliki beberapa sensor jarak dekat untuk menghindari halangan, dan ia memiliki teknik mundur untuk memantau penarikan arus sekiranya sensor jarak melewati halangan.

Ia tidak mempunyai motor dengan pengekod, dan tidak mempunyai IMU (unit pengukuran inersia), sehingga menjadikannya lebih sukar untuk mengetahui apakah ia benar-benar bergerak atau berputar, dan berapa banyak.

Walaupun seseorang dapat memperoleh petunjuk tentang jarak dengan sensor yang ada pada robot, bidang pandang mereka luas, dan tidak dapat diramalkan. Sonar akustik mungkin tidak dapat dipantulkan kembali dengan betul; inframerah boleh dikelirukan oleh pencahayaan lain, atau bahkan beberapa permukaan reflektif. Saya tidak pasti sukar untuk benar-benar mencuba perubahan jarak sebagai teknik untuk mengetahui sama ada robot bergerak dan sejauh mana dan ke arah mana.

Saya sengaja memilih untuk TIDAK menggunakan pengawal mikro seperti Arduino kerana a) Saya tidak suka persekitarannya psuedo-C ++, b) dan terlalu banyak pembangunan akan menghabiskan memori baca-tulis (?), Dan bahawa saya memerlukan komputer hos untuk mengembangkan (?). Atau mungkin saya kebetulan seperti Raspberry Pi.

Pi yang menjalankan Raspbian, bagaimanapun, bukan OS masa nyata, jadi antara ketidakstabilan sensor ini, dan OS 'tidak membaca dengan tepat setiap masa, saya merasakan bahawa tujuan sensor ini lebih sesuai untuk mengelakkan halangan dan tidak pengukuran jarak sebenar.

Pendekatan itu kelihatan rumit dan tidak begitu banyak manfaatnya, ketika kita dapat menggunakan sensor ToF (waktu penerbangan) yang lebih baik (kemudian) untuk tujuan itu (SLAM).

Salah satu pendekatan yang dapat kita gunakan adalah untuk mengikuti jejak perintah pergerakan apa yang dikeluarkan dalam detik atau perintah X terakhir.

Sebagai contoh, katakan bahawa robot tersekat menghadap sudut secara menyerong. Satu set sensor mengatakan bahawa ia terlalu dekat dengan satu dinding, jadi berpusing, tetapi kemudian set sensor yang lain mengatakan bahawa terlalu dekat dengan dinding yang lain. Ini akhirnya hanya mengulangi corak sisi-ke-sisi.

Contoh di atas hanyalah satu kes yang sangat mudah. Menambah beberapa kepintaran mungkin menaikkan corak berulang ke tahap yang baru, tetapi robot tetap tersekat di sudut.

Contohnya, bukannya berputar bolak-balik di tempatnya, ia berputar sehala, melakukan sekejap terbalik (yang kemudian membersihkan petunjuk jarak kritikal), dan walaupun berputar ke arah lain, ia tetap bergerak ke depan pada beberapa sudut kembali ke sudut, mengulangi nada yang lebih rumit pada dasarnya perkara yang sama.

Itu bermakna kita benar-benar dapat menggunakan sejarah perintah, dan melihat bagaimana memanfaatkan dan menggunakan maklumat tersebut.

Saya dapat memikirkan dua cara yang sangat asas (asas) menggunakan sejarah pergerakan.

  • untuk jumlah pergerakan X terakhir, adakah ia sepadan dengan paten Y. Contoh yang mudah ialah (dan ini berlaku) "KEHADIRAN, REVERSE, FORWARD, REVERSE,…..". Jadi ada fungsi pencocokan ini yang mengembalikan sama ada BENAR (corak dijumpai) atau SALAH (tidak dijumpai). Sekiranya BENAR, di bahagian navigasi program, cubalah urutan pergerakan lain.
  • untuk jumlah pergerakan X terakhir, adakah pergerakan ke hadapan umum atau bersih. Bagaimana seseorang dapat menentukan apa itu pergerakan ke hadapan yang sebenarnya? Baiklah.. satu perbandingan yang mudah adalah bahawa untuk pergerakan X terakhir, "KEHADIRAN" berlaku lebih daripada "REVERSE". Tetapi itu tidak semestinya satu-satunya. Bagaimana dengan ini: "KANAN, KANAN, KIRI, KANAN". Dalam hal ini, robot harus membuat putaran kanan untuk keluar dari sudut atau kerana menghampiri dinding pada sudut, yang dapat dianggap kemajuan maju yang nyata. Sebaliknya, "KIRI, KANAN, KIRI, KANAN …" mungkin tidak dianggap kemajuan maju yang sebenar. Oleh itu, jika "KANAN" terjadi lebih banyak daripada "KIRI", atau "KIRI terjadi lebih banyak daripada" KANAN ", maka itu mungkin merupakan kemajuan yang nyata.

Pada permulaan Instructable ini, saya menyebutkan bahawa kemungkinan gol ke-3 boleh menjadi segi empat tepat atau sejajar dengan dinding. Untuk itu, bagaimanapun, kita memerlukan lebih dari "kita dekat dengan beberapa objek". Sebagai contoh, jika kita dapat memperoleh dua sensor akustik menghadap ke depan (bukan fokus artikel ini) untuk memberikan respons yang cukup baik dan stabil mengenai jarak, jelas jika seseorang melaporkan nilai yang jauh berbeza daripada yang lain, robot telah mendekati dinding pada sudut, dan boleh melakukan beberapa manuver untuk melihat apakah nilai-nilai itu saling mendekat (menghadap dinding tepat).

Langkah 6: Pemikiran Akhir, Fasa Seterusnya…

Semoga Instructable ini memberi beberapa idea.

Menambah lebih banyak sensor memperkenalkan beberapa kelebihan, dan cabaran.

Dalam kes di atas, semua sensor akustik berfungsi dengan baik dan agak lurus dengan perisian.

Setelah sensor IR diperkenalkan ke dalam campuran, ia menjadi sedikit lebih mencabar. Sebabnya ialah sebilangan bidang pandangan mereka tumpang tindih dengan bidang sensor akustik. Sensor IR kelihatan sedikit sensitif dan tidak dapat diramalkan dengan perubahan keadaan cahaya sekeliling, sedangkan tentunya sensor akustik tidak dipengaruhi oleh pencahayaan.

Jadi cabarannya adalah apa yang harus dilakukan jika sensor akustik memberitahu kita bahawa tidak ada halangan, tetapi sensor IR itu.

Buat masa ini, selepas percubaan dan kesilapan, perkara-perkara berakhir dalam keutamaan ini:

  1. amp-sensing
  2. Penginderaan IR
  3. penderiaan akustik

Dan apa yang saya lakukan hanyalah untuk menurunkan kepekaan sensor IR, sehingga mereka hanya dapat mengesan objek yang sangat dekat (seperti kaki kerusi yang akan berlaku)

Sejauh ini, tidak ada keperluan untuk melakukan perisian multi-threading atau interrupt-driven, walaupun kadang-kadang saya mengalami kehilangan kawalan antara Raspberry Pi dan pengendali motor Roboclaw (kehilangan komunikasi bersiri).

Di sinilah rangkaian E-Stop (lihat Instruksional sebelumnya) biasanya akan digunakan. Namun, kerana saya tidak mahu (belum) berurusan dengan menetapkan semula Roboclaw semasa pembangunan, dan robot tidak berjalan pantas, dan saya hadir untuk memantau dan mematikannya, saya belum menghubungkan E-Stop.

Akhirnya, multi-threading kemungkinan besar diperlukan.

Langkah seterusnya…

Terima kasih kerana berjaya sejauh ini.

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

Disyorkan: