Autopilot buatan rumah pada papan Tinker Single Board Computer (SBC) dan Arduino DUE

gambar

Gagasan membangun autopilot muncul sekitar 2 tahun yang lalu. Saya ingin membuat alat yang sepenuhnya otonom yang dapat bergerak dari titik A ke titik B dengan kemungkinan menghindari tabrakan dan terbang di sekitar rintangan, mampu mengatasi zona kemacetan atau tidak adanya sinyal satelit. Saya juga ingin memiliki kontrol yang mudah dan sederhana dengan mouse seperti yang diterapkan dalam permainan (strategi) mengendalikan pergerakan pesawat dengan bantuan poin. Saya harus memulai semuanya dari awal, seperti artikel ini, jadi jika ada kesalahan, tulis di komentar. Saya akan mulai dalam rangka.



Perangkat keras


Awalnya, saya tidak tahu perangkat keras mana yang lebih baik untuk digunakan untuk proyek ini, tetapi pada akhirnya saya sampai pada kesimpulan bahwa pilihan terbaik adalah sekelompok mikrokontroler (MK) + komputer papan tunggal. Di mana MK memecahkan masalah stabilisasi pesawat terbang (LA), pergerakannya pada jalur dan ketinggian tertentu, dan komputer papan tunggal memecahkan masalah navigasi dan pergerakan di sepanjang rute. Karena rencananya adalah untuk menghindari tabrakan, komputer harus cukup kuat untuk memproses informasi dari sensor deteksi hambatan, kompak dan tidak terlalu mahal pada waktu itu TinkerBoard adalah yang paling cocok untuk deskripsi ini, Raspbery kemudian 3B + dan jauh lebih rendah dalam karakteristik. Sebagai MK, saya ingin memiliki pengontrol yang kompatibel dengan Arduino Arduino memiliki basis besar sketsa siap pakai dan karena itu pilihan jatuh pada DUE 84 MHz, 32bit ARM Cortex-M3 karenadia yang paling kuat dan harus mengimbangi keterusterangan tangan saya)).

Awalnya, saya berencana menggunakan MPU 9250 dengan filter Majevik sebagai sensor orientasi, dan hasilnya sangat baik. Keuntungan utama dari opsi ini adalah bahwa semua perhitungan, termasuk kalibrasi sensor (akselerometer, giroskop dan magnetometer), ada di MK. Tapi ada masalah, filter tidak mendapat kompensasi untuk akselerasi linier, yang terus-menerus terjadi selama guncangan atau perubahan yang tajam tentu saja. Ini diungkapkan dalam pembacaan pitch and roll, pada saat akselerasi mereka mulai melayang pergi, dan melewati regulator diferensial (PD) proporsional dan terutama bagian diferensial, masalah yang diciptakan mengambang. Karena itu, saya harus menggunakan sensor dengan filter BNO 055 yang sudah diterapkan.

Berbeda dengan MPU 9250, BNO memiliki onboard Cortex M0 MK terintegrasi, yang segera menghitung orientasi dalam sudut Euler, quaternine orientasi absolut dan menghitung percepatan linier, meskipun sensor ini juga memiliki beberapa kelemahan. Masalah utama dari sensor ini adalah kalibrasi otomatis, atau lebih tepatnya, yang tidak dapat dimatikan, itu adalah "fit" dari sensor ini dan kalibrasi ini memiliki sifat yang tidak menyenangkan untuk menghilang, kadang-kadang benar-benar tiba-tiba bahkan hanya berada di satu tempat tanpa gerakan. Hal ini terutama tercermin pada yaw yang melekat pada magnetometer pada sensor ini dan harus menunjukkan arah ke kutub utara magnet (tentu saja), tetapi kadang-kadang ini menunjukkan 100 derajat dalam strona, dan kemudian setelah dikalibrasi dapat kembali))). Dalam hal lain, masalah kursus masih dapat diselesaikan dengan menggunakan sinkronisasi dengan GPS. Jika tidak, sensor berfungsi dengan baik,ia selalu menentukan pitch and roll dengan benar, dan akselerasi linear tidak terlalu memengaruhi pekerjaannya, kecuali, tentu saja akselerasi tidak melebihi 2G, karena ambang ini digunakan untuk mengukur vektor gravitasi dan mengkompensasi penyimpangan giroskop.

Sisanya dari set besi adalah sebagai berikut: GPS Ublox Neo M8N dengan output USB,
barometer BMP 280, HSCR 04 sonar untuk menerima data ketersediaan di darat dan kecepatan vertikal yang lebih akurat, EEPROM 24c16 untuk menyimpan data kalibrasi dan pengaturan PID, modul GSM Neoway M509E untuk mengirim pesan tentang koordinat pesawat jika terjadi kecelakaan.

Diagram fungsional ditunjukkan pada Gambar 1:

gambar
Gambar 1 - Diagram fungsional Autopilot .

Perangkat lunak


Untuk pengembangan perangkat lunak, saya menggunakan QT bersama dengan IDE QT Creator. dia paling akrab bagi saya, dan juga berkat fungsionalitas lintas platform, saya dapat menjalankan program saya pada PC papan tunggal dengan Debian dan desktop dengan Windows, yang sangat nyaman. Untuk pengembangan perangkat lunak mikrokontroler, Arduino IDE digunakan. Untuk kejelasan, saya akan mencoba menyajikan semua bagian dalam Gambar 2.

gambar
Gambar 2. - Arsitektur AP (BNO 080 ditambahkan untuk masa depan).

1) Antarmuka kontrol grafis - adalah peta satelit dengan bantuan yang mengendalikan pesawat. Program tampilan gambar satelit itu sendiri bukan milik saya, itu dicuri oleh saya di sini (penulisnya juga mencoba melakukan hal serupa).

Anda dapat mengontrol pesawat menggunakan titik (marker) atau tombol WADS. Untuk mengontrol titik, perlu meletakkan rute penerbangan dengan spidol hijau, mereka ditempatkan dengan mouse (RMB), dan klik memuat rute, atau menggunakan penanda bergerak (merah) instan (LMB) dan kemudian pesawat dari posisi saat ini akan terbang ke titik ini, untuk operasinya perlu mengatur checkbox di kotak centang "Manual" dari klik yang tidak disengaja.

Semua parameter penanda dimasukkan dalam bidang yang sesuai pada formulir, Anda dapat menghapus penanda dengan mengklik dua kali tombol tengah mouse, sementara mereka akan tetap berada di memori pesawat, Anda harus menggunakan tombol hapus rute untuk menghapusnya dari memori. Setelah mencapai titik, seperti dalam strategi pesawat, itu akan berputar di sekitarnya. Kontrol tombol WADS secara langsung mengontrol roda kemudi menggunakan pengontrol PD. Ketika setiap tombol ditekan, nilai dimasukkan ke input controller, misalnya, ketika S ditekan, pitch 30 dan ketika dilepaskan adalah 0. Ketika W -30 ditekan, dll. WADS dihidupkan menggunakan kotak centang: "manual", "tombol". Mode ini membantu memeriksa fungsionalitas semua kemudi sebelum memulai. Antarmuka grafis berjalan pada laptop, perintah kontrol dari antarmuka grafis menggunakan soket TCP ditransfer ke kernel. Antarmuka kontrol grafis ditunjukkan pada Gambar 3:

gambar
Gambar 3 - Antarmuka manajemen grafis.

2) Inti dari autopilot adalah bagian dari perangkat lunak yang dihitung pada komputer papan tunggal TinkerBoard. Kernel bertanggung jawab untuk navigasi dan pergerakan sepanjang rute. Untuk melakukan ini, sensor GPS terhubung ke komputer. Dengan menggunakannya, Anda bisa mendapatkan posisi pesawat saat ini (lintang dan bujur) dan membandingkan posisi ini dengan apa yang ada di rute penerbangan. Sebagai hasil dari operasi ini, azimuth ke target diperoleh, yang dikirim ke mikrokontroler bersama dengan sisa parameter penerbangan. Di masa depan, kernel dapat dilengkapi dengan sensor IMU untuk mengimplementasikan JST. Misalnya, Anda dapat menggunakan BNO 080 untuk mengintegrasikan, mempercepat dan mendapatkan kecepatan, dan dengan mengintegrasikan kecepatan, dapatkan jarak. Jarak yang diterima dari JST perlu diterjemahkan ke dalam sistem koordinat GPS (lintang dan bujur) untuk digunakan dalam menghitung azimuth.

JST tersebut dapat digunakan bersama dengan sensor GPS jika terjadi kehilangan komunikasi sementara dengan satelit sehingga pesawat tidak melewatkan "belokan" ke suatu titik. Pada saat operasi dari GPS, JST akan terus-menerus disesuaikan dengan pembacaannya dan mengisi kesenjangan antara periode pembaruan sensor GPS. Dengan cara yang sama, algoritma visi mesin atau SLAM harus disesuaikan dengan mengubah ketinggian titik dan menciptakan bias dari azimuth yang dihitung. Setelah perhitungan rute selesai, kernel mengirimkan data UART: azimuth, ketinggian, sudut serangan, jenis titik, dan juga apakah rotasi di sekitar titik ini diperlukan.

3) Mikrokontroler melakukan perintah inti, tugas utama MK adalah mengikuti kursus yang diberikan pada ketinggian tertentu. Untuk ini, MKU dilengkapi dengan sensor IMU BNO 055, bometer 280 bmp dan sonar. Untuk gerakan di sepanjang jalur, azimuth yang diperoleh dari inti digunakan, dibandingkan dengan laju saat ini dan ketidakcocokan yang dihasilkan ditransmisikan ke pengontrol PD untuk menguap dan menggelinding. Kontrol pitch dilakukan oleh 2 pengontrol PD: yang pertama menentukan ketidakcocokan ketinggian saat ini dan yang telah ditentukan, yang diumpankan ke input dari pengontrol ke-2, sedangkan output dari pengontrol ketinggian dibatasi oleh sudut serangan saat ini untuk mengendalikan setnya. Jika dalam antarmuka grafis, jenis titik dipilih untuk lepas landas atau mendarat, sonar digunakan untuk menentukan ketinggian. Kesaksiannya dikombinasikan dengan data barometer,untuk paling akurat menentukan jarak ke tanah dan kecepatan vertikal. Selain fungsi dasar, MK juga mengumpulkan telemetri tentang pengoperasian sensor IMU, arah dan ketinggian saat ini, mentransfernya ke kernel, di mana data ini dilengkapi oleh data dari GPS dan masuk ke antarmuka grafis.

Kesimpulan


Saat ini, autopilot masih dalam tahap uji terbang dan belum sepenuhnya dikonfigurasi. Namun, saya hanya menghabiskan dua awal dan belum mengambil koefisien untuk regulator.

Secara umum, regulator PD tampaknya tidak stabil untuk saya dan saya ingin menggantinya dengan sesuatu yang lebih dapat diandalkan, terutama karena mereka sudah usang. Juga diperlukan untuk mengganti perhitungan dengan sudut Euler dengan perhitungan dalam angka empat, karena yang terakhir berperilaku lebih stabil ketika memutar pesawat pada sudut lebih dari 120 derajat dan terbang saat angin.

Foto avionik yang lebih detail


gambar



Tautan ke kode sumber racun (dengan perpustakaan) Github di sini hanya sumber tetapi lebih baru

All Articles