Python + Raspberry Pi + Pixhawk dan quadrocopter. Atau bagaimana tidak membuat robot

Halo, Habr!

Nama saya Aleksey, selama 7 tahun saya telah menjadi pengembang terkemuka solusi Smart TV di perusahaan pengembangan kebiasaan besar dari Izhevsk. Setiap tahun kami mengadakan kompetisi dekorasi Tahun Baru, dan setiap kali kami tidak menghias apa pun, tetapi kami memotong semua jenis hal teknologi. Kali ini mereka melintasi drone dan aplikasi Smart TV. Dan apa yang terjadi - baca di bawah.

Gagasan itu cukup layak. Mereka ingin membuat quadrocopter dalam bentuk giring Santa Claus, yang akan mengantarkan hadiah kepada karyawan ke kantor untuk musik. Pada saat yang sama, ia harus bernavigasi di ruang angkasa dengan bantuan analisis ArUco-tag, berinteraksi dengan aplikasi TV (“meniup” asap dari pipa dengan sekrup yang bekerja, mengeluarkan hewan untuk bertemu / melihat quadrocopter).

Dan selama tiga bulan. Tentu saja, kami tidak punya waktu.

Meskipun pada waktu yang berbeda hingga tujuh orang mengerjakan proyek, hasilnya jauh dari ideal. Secara umum, kami hanya belajar cara meluncurkan copter dan menulis aplikasi untuk TV. Atur interaksi quadrocopter dengan TV. Tetapi hal pertama yang pertama.



Saya tidak ingat di kepala yang sakit (tentu bukan di kepala saya, tetapi ini tidak akurat) muncul ide untuk meluncurkan bomber quadrocopter di kantor. Tugas itu baru dan tidak mudah, tetapi kami tidak menemukan apa pun di luar kekuatan kami di dalamnya. Ya, kami mencari-cari di internet dengan tujuan menemukan perpustakaan untuk mengendalikan pengontrol helikopter. Ya, itu perlu untuk mentransfer gambar aliran dari webcam ke klien dan menganalisanya di server. Ya, itu perlu untuk membuat gerbang bom. Ya, Anda umumnya harus menulis sebuah shell yang akan mengumpulkan semua ini dengan sendirinya. Jadi apa Kami telah melakukan semua ini (kecuali untuk mengendalikan controller). Karena itu, proyek itu diberi lampu hijau.

Perangkat


Setiap kesalahan evolusioner dari helikopter yang mengomel berdengung di atas kepala Anda, pada prinsipnya, terdiri dari satu set mekanisme dan skema. Ini adalah:

  1. pengontrol
  2. motor baling-baling
  3. baterai
  4. pengendali kecepatan (ESC),
  5. antena telemetri
  6. Modul GPS dan kompas,
  7. kamera.

Dua poin terakhir adalah opsional. Diagram sirkuit teman rotorcraft dapat dilihat di sini:



Barang ini diletakkan di kasing. Namun, korps memutuskan untuk membuatnya sendiri. Karena:

  • diri Anda dengan kumis
  • membutuhkan lambung persis dalam bentuk kereta luncur,
  • itu sudah mahal mahal.

Pengendali




Bagian terpenting dari semua larva helikopter. Ini memiliki accelerometer dalam tiga sumbu, firmware perangkat lunak, input untuk menginstal peralatan periferal dan motor penghubung, dan output untuk kontrol. Tanpa itu, drone tidak akan terbang ke udara. Bagian ini sangat penting sehingga dipasang pada platform penyerap goncangan khusus untuk mengurangi efek getaran dan beban kejut. Sesuatu seperti ini:



Kami memilih pengontrol yang relatif besar. "Relatif", karena kemudian aku melihat lebih dekat pada monster yang ditawarkan untuk paman yang serius ... Namun demikian, controller memiliki GPS, kompas, autopilot, segala macam roti bagus lainnya, mendukung hingga 8 mesin.

Sebenarnya, pengontrol seperti itu dimaksudkan tidak hanya untuk persaudaraan yang melonjak secara vertikal. Mereka dapat dipasang di semua platform bergerak, mulai dari helikopter, pesawat, berakhir dengan mobil dan kapal. Banyak kasus penggunaan. Tapi kami agak terganggu.

Mesin




Ada banyak sekali teman-teman ini. Bulat, bujur sangkar, kurva, miring, besar, kecil, mahal dan murah. Perbedaan utama: konsumsi daya maksimum, kekuatan saat ini, dan jumlah putaran per detik. Idealnya, kereta luncur seharusnya mampu menaikkan sekaleng bir (0,5 kg). Setelah memperkirakan berat total struktur, kami menghitung perkiraan gaya angkat yang diperlukan dan mengambil engine bertenaga tinggi berkualitas tinggi. Ternyata kemudian, mereka tidak pernah berlari dengan kapasitas penuh. Tapi lebih baik lebih dari kurang ...

Baterai




Satu-satunya sumber energi yang melaluinya kamikaze potensial akan tetap ada di udara. Selama operasi, beberapa poin menarik ditemukan.

Pertama, dengungan teknologi memakan energi secara gratis. Kaleng tersebut mendarat saat ini, dan membutuhkan waktu lama untuk mengisi daya.

Kedua, dia tidak hanya makan, tetapi juga tahu bagaimana meninggalkan biaya "cadangan". Idenya bagus, karena ketika ambang tegangan tercapai, mobil mengganggu penerbangan dan melakukan pendaratan lunak, tetapi ini dinyatakan dalam kenyataan bahwa dapat "mendarat" lebih cepat.

Pengontrol kecepatan




Sebuah chip kecil, yang tanpanya mesin tidak akan bekerja. Dirancang untuk distribusi tegangan dari bank ke mesin. Suatu hal yang sangat penting, biasanya dilengkapi dengan motor yang dibeli.

Antena telemetri


"

Pada dasarnya, peralatan periferal, tanpa itu, tidak akan mungkin untuk mengendalikan cabang buntu pengembangan objek terbang. Selain itu, telemetri digunakan tidak hanya untuk kontrol, tetapi juga untuk mentransmisikan sinyal video dari kamera, jadi biasanya ada dua antena. Omong-omong, telemetri dilakukan dengan mengirim dan mengirimkan sinyal ke daftar saluran. Mereka juga dapat dikontrol secara terprogram, tetapi ini pasti tidak direkomendasikan, karena ini adalah bagaimana kita benar-benar meninggalkan autopilot kabel dan menulis milik kita sendiri. Di lutut. Dan zat dan tongkat. Di malam terakhir. Betapa kita mencintai.

Modul GPS




Cara utama dan hampir satu-satunya cara untuk memposisikan perusak saraf terbang di ruang angkasa. Biasanya modul GPS juga mengandung kompas. Agar tidak ada yang memengaruhi dia dalam penerbangan, modul ditempatkan pada bar khusus sehingga tidak ada yang memengaruhi itu sama sekali. Kami menggunakannya hanya demi kompas, karena di ruangan GPS tidak pandai menangkap. Mendukung sistem penentuan posisi lainnya.

Seperti halnya GPS yang menghargai diri sendiri, GPS dapat membuat kesalahan. Kesalahan bervariasi dari beberapa meter hingga beberapa benua. Tetapi secara umum, perangkat yang diperlukan di jalan untuk misi di kejauhan.

Kamera




Untuk itulah semuanya dilakukan. Badai bandara Inggris tidak bisa hanya mengobrol di bawah kamera. Pengontrol dapat menstabilkan, mengontrolnya dari jarak jauh dan menyediakan pengaturan dan alat yang sangat rinci untuk pengelolaannya. Tetapi kami tidak menggunakan semuanya. Lain waktu.

Manajemen


Semua kerajinan teknik sapiens menggunakan pengontrol pada dasarnya dikendalikan oleh satu program: Mission Planer. Itu terlihat seperti ini:



Baca lebih lanjut di sini .

Ini menyajikan berbagai fitur dan pengaturan terluas. Ada perencanaan tugas penerbangan, penentuan posisi geografis, kontrol manual, berbagai pengaturan dan kalibrasi peralatan.

Aturan nomor 1: gunakan hanya apa yang Anda butuhkan


Ya, program itu perlu dan bermanfaat. Secara prinsip. Tetapi tidak untuk tugas kita, karena pembagi udara harus dikontrol oleh perangkat lunak, dan kita menghancurkan banyak waktu untuk berurusan dengan penjadwal ini.

Kontrol manual itu sendiri dapat dilakukan apa pun yang diinginkan hati Anda. Ada pengaturan untuk remote control, untuk joystick. Anda dapat menampilkan kontrol pada mouse dan keyboard. Persyaratan utama adalah mengkalibrasi panel kontrol. Nah, kelola secara manual. Karena kami adalah pengembang yang malas, kami tidak ingin mengelola secara manual. Saya ingin helikopter terbang sendiri.

Kontrol program


Di Internet, mereka hanya menemukan perpustakaan ini , yang dirancang untuk kontrol terprogram dari kemiripan pesawat. Dan itu tertulis (drum roll) dengan python. Secara umum, untuk versi 2.x, tetapi juga pada Python 3.5, ini bekerja cukup stabil. Perpustakaan memiliki fungsionalitas yang kaya dan dokumentasi yang relatif baik. Tetapi sebelum Anda mulai menulis kode drone mega-kontrol Anda, Anda harus terlebih dahulu ... Ya, Anda harus terhubung ke controller.

Komputer mikro Raspberry Pi digunakan sebagai komponen perangkat lunak kontrol, di mana server web digunakan pada kerangka aiohttp.

Skema dan instruksi untuk menghubungkan "raspberry" dan pengontrol dapat ditemukan di sini .

Secara skematis, tampilannya seperti ini:



Metode koneksinya adalah ini. Pengontrol dan raspberry dihubungkan oleh kabel sesuai dengan skema yang ditentukan. Dengan cara ini, sinyal radio yang dikirim dan diterima oleh pengontrol ditiru. Pada raspberry, Anda perlu menjalankan server proxy, yang akan melekat pada pengontrol dan mentransfer data darinya. Koneksi dapat dilakukan melalui telemetri atau melalui USB. Mereka menggunakan port COM yang berbeda. Gambar tersebut menunjukkan metode melalui telemetri.

Peraturan nomor 2: dokumentasi tidak lengkap. Seringkali tidak menulis hal-hal yang paling jelas.


Misalnya, untuk terhubung dari python ke controller, Anda harus menentukan alamat dan port: connectionString = '127.0.0.1:14540 ′

Tetapi ternyata alamat dan port ini juga harus ditentukan di baris peluncuran server proxy. Di sini:

mavproxy.py —master=/dev/ttyAMA0 —baudrate 921600 —aircraft MyCopter 

Ya, ini jelas, tetapi tidak pernah jelas. Dan kami menghabiskan banyak waktu untuk mencari tahu.

Namun, bahkan setelah memulai proxy dengan garis yang benar dan setelah berhasil menyambungkan ke drone python, keajaiban teknik permusuhan tidak ingin memulai. Yaitu, kita menerima data dari helikopter, kita melihatnya, tetapi ancaman surgawi masa depan dari manusia menolak untuk menjalankan perintah. Pada saat terakhir, ternyata data untuk terhubung ke drone sangat dibutuhkan. Secara kondisional, ia harus mulai mengirim data ke telemetri yang terhubung, jika tidak, ia tidak menghubungkannya dan duduk dengan puas.

Karenanya aturan nomor 3: gunakan USB


Ya, dokumentasinya jauh lebih sedikit, tetapi stabilitas koneksi pasti akan lebih tinggi. Karena saya tidak perlu menggunakan pin raspberry.

Uji terbang




Dan tiba-tiba ternyata:

  1. helikopter tidak terbang dengan lancar
  2. kesalahan telemetri ± meter atau lebih,
  3. Untuk penerbangan, tugas-tugas seperti: mendaki 10-20 meter, terbang 100 meter ke utara, dll.

Biarkan saya mengingatkan Anda bahwa desain ini, dibuat di bawah pengaruh helikopter dari film "Avatar", diluncurkan di dalam dinding kantor, di mana ada banyak peralatan kantor, lampu, ventilasi, dan dekorasi menggantung dari langit-langit. Ya, ada juga karyawan. Secara umum, dengan cepat menjadi jelas bahwa penerbangan dalam ruangan yang serius akan penuh dengan 160 kepala yang terputus.

Peraturan nomor 4: gunakan kondisi pengujian normal


Jika tangki terbang berukuran 50 x 60 cm, maka keberadaannya di udara dalam ruang terbatas pasti akan menyebabkan kerusakan atau kerusakan bagi yang berada di dekatnya. Area tes yang ideal adalah ruang berukuran gym.

Visi komputer


Portal terpisah ke neraka adalah tugas dari visi komputer. Idenya adalah untuk membaca tag ArUco, yang masing-masing memiliki posisi yang terekam dalam denah ruangan, dan relatif terhadap siapa copter menentukan posisinya di ruang angkasa, serta posisi relatif terhadap titik rute saat ini.

Contoh label:



Untuk implementasi, pustaka openCV digunakan . Ini digunakan untuk mengenali secara umum segala sesuatu yang, khususnya: wajah orang, benda, nomor mobil, dan tanda kita. Memasang perpustakaan di sistem operasi raspberry - Rasbian - menjadi mimpi buruk, yang diperebutkan empat orang secara bergantian. Namun demikian, kami berhasil menyelesaikannya, dan sekarang mesin telah "belajar" mengenali tanda-tanda dalam aliran video dari webcam. Tetapi sekali lagi, tidak ada cukup waktu untuk mengkonfigurasi semuanya. Misalnya, dari dua atau lebih tag, perpustakaan mengembalikan nomor semua tag yang dikenali, dan data hanya untuk satu tag. Kenapa begitu Ada sebuah misteri besar ...

Aturannya penting: mengalokasikan cukup waktu untuk memperbaiki solusi


Indra lainnya


Agar mutan dari sayap Icarus tidak menempel pada rintangan yang muncul secara tiba-tiba, mereka ingin menggunakan sensor jarak. Mereka seharusnya berada di semua sisi mobil dan harus memberi sinyal pendekatan mendekati rintangan, sebagai akibatnya helikopter itu harus berhenti, mengambil "langkah ke samping" dan terus bergerak lebih jauh di sepanjang rute.

Kami tidak punya waktu untuk melakukan fungsi ini sama sekali.

Rute


Kami berbicara banyak tentang jalur penerbangan helikopter. Dan jenis binatang apa mereka? Saya akan mengatakan segera bahwa fungsi ini dilaksanakan oleh yang pertama dan secara penuh, tetapi ... tidak berguna.

Rute gerak adalah grafik yang terhubung dengan simpul, yang masing-masing memiliki koordinat tiga dimensi dalam ruang ruangan. Oleh karena itu, helikopter harus mengikuti dari titik awal ke titik akhir, dalam melaksanakan misi penerbangan terakhir. Mengikuti dengan bergerak dari vertex saat ini ke yang berikutnya. Karena untuk setiap titik kita tahu koordinatnya, dan untuk helikopter kita tahu lokasi (kompas) dan posisinya (tanda), lalu mencari tahu di mana terbang adalah masalah teknis semata. Tugas menemukan jalur antara titik awal dan selesai diselesaikan dengan fungsi rekursif. Rute, tepi dan puncak disimpan dalam basis data yang digunakan pada raspberry.

Aturan terakhir: lakukan hanya apa yang perlu Anda terapkan


Tumpukan teknologi


Copter: Raspberry Pi , Rasbian , OpenCV , Python 3.5 , aiohttp , DroneKit , RPi.GPIO , SQLite .

Server dengan dinamika untuk TV: node.js , Express , socket.io .

Aplikasi TV: JavaScript ES6 , webpack 2 , Canvas .

Repositori dengan kode copter di sini . Untuk bintang - plus dalam karma.

Beberapa kata untuk memperjelas persyaratan (Saya meminta Anda untuk mempertimbangkan penilaian apa pun yang subjektif).

  • Raspberry Pi. Komputer mikro lengkap dengan pin dan output yang tersedia untuk kamera khusus dan layar sentuh. Di situlah kode kontrol, server web, perpustakaan openCV berada. Bahkan, copter adalah server terbang.
  • Raspbian Sistem operasi Linux untuk raspberry. Ada beberapa dari mereka dan secara umum Anda dapat menempatkan apa saja, tetapi lebih baik untuk menempatkan yang dirancang khusus, kalau tidak mungkin ada masalah dengan interaksi dengan peralatan komputer, dengan pin yang sama, misalnya. Bahkan ada versi yang disesuaikan dari Windows 10.
  • OpenCV. Perpustakaan untuk mengenali elemen dalam aliran video. Juga tahu cara streaming aliran video, yang digunakan dalam proyek untuk mengeluarkan gambar ke klien. (ya, copter memiliki klien web sendiri)
  • Python 3.5. Python 3.5. Bukan 2. *.
  • Aiohttp. Kerangka kerja server web tidak sinkron ditulis dengan python. Untuk beberapa alasan, dia lebih menyukai Django . Tapi ada pilihan.
  • DroneKit. Perpustakaan untuk menghubungkan ke pengontrol helikopter dari program. Fungsionalitas yang sangat kaya, ditambah dengan dokumentasi yang relatif baik. Dengan tidak adanya analog - alat yang brilian.
  • RPi.GPIO. Pustaka python untuk berinteraksi dengan pin raspberry. Memungkinkan Anda untuk menghidupkan dan mematikan pin, mendengarkan nilainya. Tidak dapat meneruskan nilai selain 0 atau 1-ts. Atau saya tidak menemukan.
  • SQLite DBMS + DB + kayu bakar digabung menjadi satu file. Ideal untuk proyek pelatihan dan non-penjualan, jika Anda tidak perlu menggunakan sesuatu yang sarat muatan. Nyaman untuk melakukan perubahan.
  • Node.js. JavaScript sisi server
  • Ekspres Kerangka server web ditulis dalam node.js. Sangat nyaman dan minimalis.
  • Socket.io. Server dan pustaka klien untuk mengimplementasikan protokol webSocket. Nilai tambah utama adalah stabilitas pekerjaan dan fungsionalitas luas yang disediakan.

Kesimpulan


Dalam perumusan asli, tugas ini layak, meskipun membutuhkan lebih banyak waktu dan usaha. Karena fakta bahwa metode kontrol autopilot dan copter sedikit kurang sepenuhnya terkait dengan GPS, mereka harus ditinggalkan ke arah perintah langsung ke saluran kontrol. Ini mensyaratkan perlunya menulis autopilot Anda, yang merupakan tugas yang diselesaikan. Dan kemudian - untuk menguji, menguji dan menguji.

Secara pribadi, saya tertarik. Dan bagaimanapun saya akan tetap melakukan pembom hadiah otomatis. Dan untuk semua yang tertarik, mungkin, saya akan pergi

Satu-satunya aturan adalah: menetapkan tujuan yang tinggi dan sulit dan pergi ke sana!


Semoga beruntung untuk semuanya!

Source: https://habr.com/ru/post/id438496/


All Articles