Awalnya, OMower dirancang untuk antarmuka kontrol pfodApp dan Modbus yang sederhana. Yang pertama adalah protokol teks tingkat tinggi di mana menu dan perintah kontrol ditransmisikan, dan yang kedua adalah hal yang terkenal, tetapi tidak terlalu nyaman dalam aplikasi ini, karena itu memerlukan program kontrol untuk terus-menerus memeriksa status semua sensor yang digunakan "secara manual". Oleh karena itu, diputuskan untuk secara bertahap beralih ke ROS (Robot OS), kerangka kerja yang banyak digunakan untuk mengendalikan berbagai robot.

Saat ini, dukungan ROS berada pada tahap awal, termasuk hanya transmisi informasi dari sensor dalam bentuk array sederhana (tanpa menggunakan format pesan khusus yang ditawarkan oleh banyak perpustakaan ROS), debug log dan kontrol aliran perintah dalam format pfodApp / Modbus, tanpa kemungkinan benar-benar mengendalikan robot dengan alat ROS standar. Artinya, untuk memindahkan robot dari tempatnya atau mengubah pengaturan internal robot, Anda harus mengirim perintah teks dalam format pfodApp ke sana. Tetapi bahkan dalam bentuk terpotong seperti itu - Anda dapat dengan mudah menyiarkan dan merekam apa yang terjadi dengan robot, memvisualisasikan pergerakannya dalam alat ROS (rviz) standar, serta menambahkan layanan untuk fungsi tambahan. Seperti, misalnya, kesempatan untuk naik ke arah templat visual (kotak-kotak) yang disediakan oleh omower_seeker.py, untuk kedatangan yang akurat di stasiun parkir.
Gambar menunjukkan aliran data dalam robot. Layanan ROS utama dijalankan pada Orange PI Zero, terjebak dalam slot khusus pada papan robot (pada mesin uji Raspberry PI3 digunakan untuk ini, terhubung dengan cara yang sama - melalui port serial). Melalui antarmuka antarmuka, robot mentransmisikan pesan dari sensor (seperti / imu / orientasi atau / motor / PWM), log debug dalam format teks dan output menu / pesan dalam format pfodApp atau Modbus ke kernel ROS, menerima aliran perintah teks atau Modbus -pertanyaan. Dua tambahan Raspberry PI Zero datang dengan aliran gambar dari kamera, tetapi seperti yang telah ditunjukkan oleh praktik, tidak mungkin untuk mendapatkan sinkronisasi normal untuk memproses gambar stereo dengan skema seperti itu (kualitasnya terlihat pada gambar di bawah), sehingga kamera stereo normal akan segera diganti.
Tingkat integrasi ROS dalam OMower akan berangsur-angsur meluas, hingga memberikan akses penuh ke semua variabel internal robot dan kemampuan untuk mengelolanya melalui alat ROS standar (seperti pesan cmd_vel yang menentukan kecepatan yang diperlukan).

Saya akan memberi tahu Anda sedikit lebih banyak tentang modul omower_seeker.py, sebagai contoh menggunakan ROS untuk menambahkan fungsi ke OMower. Tujuannya cukup sederhana - untuk pergi ke arah papan catur, menyesuaikan rute Anda secara real time. Fitur ini akan digunakan untuk mendorong mesin pemotong rumput ke stasiun parkir, di mana ia dapat dengan cepat mengisi baterainya. Menganalisis gambar dari salah satu kamera, modul menghitung dua sudut (sudut deviasi papan dari pusat kamera dan sudut rotasi papan itu sendiri relatif terhadap tegak lurus) dan mentransmisikannya sebagai perintah teks ke modul pencari internal (omower-seeker.h / cpp dalam OMower SDK).
Dari luar, ini tampak seperti tugas yang cukup sederhana, tetapi dalam kehidupan nyata ada masalah serius - kecepatan pemrosesan gambar pada komputer mikro yang dibangun ke dalam robot. Seperti yang diperlihatkan oleh praktik, kecepatan mencari pola dalam OpenGL dalam gambar ketika menggunakan Orange PI yang berdaya rendah dan Raspberry Pi sangat rendah dan tidak stabil, mengambil dari puluhan hingga ratusan milidetik pada resolusi 640x480, yang selama mengemudi berubah menjadi penyimpangan dari rute yang diperlukan, karena robot , bahkan dengan kecepatan rendahnya, berhasil mengubah sudut substansial atau menempuh jarak yang relatif besar selama waktu ini. Sebenarnya, itulah sebabnya papan catur dengan sel minimum dipilih, karena templat lain membutuhkan lebih banyak waktu.
Untuk mengimbangi waktu pencarian yang lama untuk templat visual, skema kompas digunakan - mikrokontroler robot menyimpan nilainya setiap 100 milidetik, menyimpan lima sampel dalam setengah detik terakhir (analisis yang lebih lama dibuang begitu saja, karena tidak banyak digunakan untuk navigasi yang akurat). Sudut terhitung dari omower_seeker.py (yang juga mentransmisikan waktu pencarian templat ke mikrokontroler) dihitung ulang ke sudut rotasi nyata menggunakan nilai kompas yang disimpan, yang tidak lebih dari 100 milidetik dari waktu pencarian, dan robot bergerak di sepanjang sudut ini. Ini memungkinkan Anda untuk lebih atau kurang akurat pergi ke arah papan catur dalam garis lurus. Atau, jika sedikit diputar relatif terhadap tegak lurus - sepanjang busur mengoreksi sudut pendekatan sehingga sedekat mungkin dengan sumbu templat, karena kita tidak hanya perlu mengemudi ke papan, tetapi juga masuk ke rel panduan dan terhubung ke kontak pengisian daya.
Algoritma kedatangan penuh di stasiun diimplementasikan dalam tiga tahap. Dua titik diatur pada bidang GPS - titik awal (di suatu tempat di tengah area kerja), dan titik di depan stasiun, serta sudut rotasi ke stasiun. Setelah robot tiba dari titik awal ke titik kedua dan beralih ke sudut yang diinginkan ke arah kotak-kotak di stasiun, modul pencari mulai beraksi, menyesuaikan kecepatan motor melalui pengontrol PID. Jika salah satu langkah gagal, atau sudut deviasi melebihi nilai yang ditetapkan, robot membatalkan balapan dan kembali ke titik awal lagi.
Tautan dan video:
→
OMower SDK, perpustakaan untuk Arduino IDE dan tata letak papan sirkuit→
Firmware siap pakai menggunakan SDK yang mengimplementasikan pfodApp / Modbus dan koneksi ke ROS→
paket omower_gateway untuk ROS