Ini adalah kelanjutan dari kisah drone otonom. Bagian
pertama berbicara tentang perangkat keras, yang ini akan berbicara tentang perangkat lunak. Untuk mulai dengan, program pendidikan kecil tentang interaksi operator dengan helikopter. Berikut adalah tata letak khas untuk kebanyakan drone rakitan:

Dan inilah skema untuk drone canggih:

Beginilah cara kerja drone mainan, yang dikendalikan dari smartphone:

Anda dapat mengontrol drone melalui Internet (jika Anda memiliki kartu SIM dengan alamat IP statis):

Atau lebih jika alamat IP dinamis:

Untuk keandalan dan redundansi saluran komunikasi, opsi terakhir dapat dikembangkan ke kondisi seperti itu:

Selanjutnya, saya akan menjelaskan proses pengaturan untuk pengendali penerbangan Emlid Navio 2 dan komputer mikro Raspberry Pi 3.

Tetapi, dengan sedikit modifikasi, pengaturan ini cocok untuk pengontrol penerbangan apa pun, yang dengannya Anda dapat berkomunikasi melalui protokol
MAVLink bersama dengan komputer mana pun di keluarga Linux OS.
Penting! Pengaturan harus dilakukan dengan mematikan power pada pengontrol kecepatan agar mesin tidak sengaja hidup.Perangkat lunak kontrol drone untuk PC dan tablet
Untuk mengontrol UAV, program khusus GCS (Ground Control Station) digunakan. Lebih jauh dalam teks saya akan menggunakan singkatan ini. Saya menyukai
QGroundControl , sebuah multi-platform open source (Windows, Linux, MacOS, iOS, Android) GCS yang menjadi bagian dari proyek
DroneCode . Tetapi ada alternatif, gratis dan komersial:
Perencana APM ,
MissionPlanner ,
UgCS ,
LibrePilot ,
OpenPilot ,
Tower (DroidPlanner) untuk Android,
MAVPilot (iOS),
SidePilot (iOS). Serta konsol
MAVProxy .
Instal gambar OS pada kartu SD
Untuk operasi autopilot normal, sangat disarankan untuk menggunakan kartu SD "cepat" (kelas 10). Kartu memori lambat tidak punya waktu untuk menyimpan log autopilot bahkan pada frekuensi rendah, akibatnya kartu itu bengkok atau tidak ditulis sama sekali. Bukti ini mungkin merupakan kesalahan "
Detak jantung IO ", yang dapat diamati di konsol MAVLink (cara menonton konsol MAVLink dijelaskan di bawah). Saat membeli, lihat kemampuan untuk menulis video 4K: kemungkinan besar itu akan menjadi SD cepat. Sayangnya, saya mengetahui hal ini setelah jatuhnya drone, ketika itu perlu untuk menganalisis log dan mencari tahu alasannya. Log tidak dapat dibaca untuk beberapa GCS. Alasan mematikan motor selama penerbangan ternyata dangkal: Saya lupa menyesuaikan tegangan minimum pada baterai dalam pengaturan untuk operasi yang gagal.
Jadi, unduh gambar Raspbian Stretch yang sudah selesai dengan Ardupilot dan ROS yang sudah diinstal dari Emlid dari
halaman instruksi asli . Dan kami menulisnya ke kartu memori menggunakan
Etcher atau program serupa.
Untuk menghubungkan Raspberry ke jaringan WiFi Anda segera setelah dinyalakan, Anda perlu mengedit file
wpa_supplicant.conf di root kartu SD. Itu harus berisi baris berikut:
network={ ssid="_wifi_" psk="_wifi_" }
Anda juga dapat mengonfigurasinya tanpa WiFi dengan menghubungkan komputer satu-pelat ke router dengan kabel Ethernet. Sekarang lepaskan kartu SD dari PC, masukkan ke dalam Raspberry dan nyalakan daya. Setelah setengah menit, itu akan muncul di panel admin router pada halaman perangkat yang terhubung (navio
hostname ).
Memperbarui kit distribusi dan menginstal paket yang diperlukan
Buka klien SSH dan sambungkan ke Raspberry (alamat IP navio lokal alih-alih
RASPBERRY_IP_ADDRESS ):
ssh pi@RASPBERRY_IP_ADDRESS
Kata sandi standar:
raspberry . Pertama-tama, perlu untuk memperluas sistem file OS ke seluruh volume kartu SD:
sudo raspi-config --expand-rootfs
dan reboot:
sudo reboot
Setelah reboot, hubungkan lagi dan perbarui distribusi:
sudo apt-get update && sudo apt-get dist-upgrade -y
Instal paket tambahan:
sudo apt-get install autoconf automake libtool pkg-config libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libraspberrypi-dev gstreamer1.0-tools gstreamer1.0-plugins-good gstreamer1.0-plugins-bad
dan kompilasi
pembungkus gst-rpicamsrc untuk
gstreamer dan kamera asli Raspicam:
git clone https://github.com/thaytan/gst-rpicamsrc.git rpicamsrc cd rpicamsrc chmod +x autogen.sh ./autogen.sh --prefix=/usr --libdir=/usr/lib/arm-linux-gnueabihf/ make sudo make install
Periksa apakah kamera berfungsi (file video test.h264 dibuat):
gst-launch-1.0 rpicamsrc bitrate=1000000 ! filesink location=test.h264
Jika gstreamer mulai, tunggu beberapa detik hingga video direkam. Anda dapat menghentikan proses dengan menekan
Ctrl + C. Jika ada video, maka kamera berfungsi.
Konfigurasikan dan jalankan Ardupilot
Rilis versi baru Ardupilot agak terlambat dalam perakitan dari Emlid. Jika fungsionalitas yang diperlukan tersedia dalam versi terbaru, maka Anda dapat menginstalnya dari sumber
menggunakan instruksi ini .
Pengembang Navio menambahkan
utilitas alat Emlid yang sederhana dan nyaman ke sensor mereka untuk memeriksa sensor dan mengatur Ardupilot. Pertama, periksa apakah Raspberry melihat pengontrol Navio:
emlidtool info
Jika dalam menanggapi perintah ini menghasilkan sesuatu seperti:
Vendor: Emlid Limited Product: Navio 2 Issue: Emlid 2018-06-05 831f3b08594f2da17dccae980a2e3659115ef71f Kernel: 4.14.34-emlid-v7+ RCIO firmware: 0xcaec2284
itu berarti dia melihat. Periksa status sensor (tampilkan daftar dan status):
emlidtool test
dan pengontrol PWM di kernel Linux:
cat /sys/kernel/rcio/status/alive
0 = tidak bekerja, 1 = bekerja.
Firmware dari pengontrol PWM diperbarui sebagai berikut:
sudo emlidtool rcio update
Sekarang konfigurasikan Ardupilot:
sudo emlidtool ardupilot
GUI teks dengan menu langkah demi langkah akan terbuka di terminal. Kami memilih copter versi terbaru, ketik
arducopter , autostart saat startup (
Saat boot: aktifkan ), mulai setelah konfigurasi (
Ardupilot: start ).

Kami keluar melalui item menu
Keluar .
Periksa apakah Ardupilot sudah mulai:
sudo systemctl status arducopter
Harap dicatat bahwa file startup di systemd disebut
arducopter , karena opsi
copter dikonfigurasi.
Sekarang kita perlu mengkonfigurasi Ardupilot sehingga mengirimkan kita telemetri. Untuk melakukan ini, edit file konfigurasi:
sudo nano /etc/default/arducopter
Itu harus berisi baris berikut:
TELEM1="-A udp:127.0.0.1:14550" ARDUPILOT_OPTS="$TELEM1"
Simpan file (
Ctrl + X , lalu
Y ) dan mulai ulang Ardupilot:
sudo systemctl daemon-reload sudo systemctl restart arducopter
Anda dapat memeriksa status proses Ardupilot dengan perintah berikut:
sudo systemctl status arducopter
Dengan pengaturan ini, Ardupilot akan mengirimkan telemetri (paket
MAVLink ) ke port UDP lokal 14550. Selanjutnya, skrip
MAVProxy (uraian di bawah) akan mengambil telemetri dari sana dan mengirimkannya ke GCS atau skrip, serta mengirim paket dengan perintah di arah yang berlawanan.
Alih-alih alamat dan port lokal, Anda dapat merekam alamat IP PC atau tablet di jaringan lokal dan paket akan segera disiarkan di sana.

Namun, pendekatan ini dibenarkan jika data telemetri tidak digunakan di tempat lain dan perangkat dengan GCS memiliki alamat IP statis. Jika tidak, setiap kali Anda harus mendaftarkan Ardupilot baru dalam pengaturan. Untuk berkomunikasi dengan autopilot melalui TCP, beberapa GCS dengan alamat dinamis dan beberapa skrip lain di komputer on-board dapat secara bersamaan, lebih mudah menggunakan MAVProxy.

Skrip ini (ditulis dengan Python) dapat menerima paket MAVLink ke alamat UDP lokal dan menyampaikannya ke beberapa alamat IP lokal atau jarak jauh, baik melalui UDP dan TCP. Paket dikirim di kedua arah ke Ardupilot ⇔ GCS. Selain itu, MAVProxy adalah GCS lengkap, tetapi dengan antarmuka teks.
MAVProxy
MAVProxy sudah diinstal pada gambar Navio. Itu juga dapat
diinstal pada PC (Windows, Linux, MacOS) untuk komunikasi lebih lanjut dengan autopilot dalam mode konsol.
Setelah memastikan Ardupilot berfungsi, jalankan skrip MAVProxy di Raspberry dengan perintah ini:
mavproxy.py --master=udp:127.0.0.1:14550
Parameter --master = udp: 127.0.0.1: 14550 menetapkan sumber data untuk skrip. Ini adalah port UDP lokal yang terdaftar dalam file konfigurasi Ardupilot. Setelah menjalankan perintah, MAVProxy akan terhubung ke port ini dan menampilkan pesan autopilot, mirip dengan milik saya:
pi@navio:~ $ mavproxy.py --master=udp:127.0.0.1:14550 Connect udp:127.0.0.1:14550 source_system=255 Failed to load module: No module named adsb. Use 'set moddebug 3' in the MAVProxy console to enable traceback Log Directory: Telemetry log: mav.tlog Waiting for heartbeat from 127.0.0.1:14550 MAV> online system 1 STABILIZE> Mode STABILIZE fence breach GPS lock at 0 meters APM: APM:Copter V3.5.5 (88a1ecdd) APM: Frame: UNKNOWN APM: PreArm: RC Roll not configured APM: PreArm: Compass not calibrated APM: PreArm: 3D Accel calibration needed APM: PreArm: check firmware or FRAME_CLASS APM: PreArm: Throttle below Failsafe
Karena autopilot belum dikalibrasi dan tidak sepenuhnya disetel, pesan juga fasih berbicara tentang ini. Dalam mode ini, Anda dapat berkomunikasi dengan autopilot melalui perintah. Jika drone disetel sepenuhnya, maka urutan dua perintah seperti itu akan menyebabkan awal mesin dan drone lepas landas hingga ketinggian 20 m:
arm throttle takeoff 20
Autopilot yang tidak dikalibrasi tidak akan terbang, tetapi akan menampilkan pesan dengan alasan mengapa ia tidak dapat melakukan ini.
Membangun komunikasi dengan drone di jaringan lokal
Hentikan skrip (
Ctrl + C ) dan jalankan kembali dalam formulir ini:
mavproxy.py --master=udp:127.0.0.1:14550 --out=tcpin:0.0.0.0:5762
Dengan parameter tambahan
--out = tcpin: 0.0.0.0: 5762, MAVProxy akan mendengarkan pada port 5762 untuk koneksi TCP yang masuk dari GCS. Segera setelah GCS terhubung, paket data akan mulai bergerak antara drone dan GCS. Mari kita coba sambungkan dari PC:

Jika koneksi berhasil, maka GCS akan menampilkan banyak pesan dengan permintaan untuk mengkalibrasi sensor dan memuat parameter on-board dengan nilai saat ini:


Kalibrasi sensor dan penyetelan parameter autopilot
Kalibrasi autopilot dapat dilakukan di hampir semua GCS. Dokumentasi Ardupilot menggambarkannya dengan sangat rinci. Pertama-tama, kita mengatur jenis bingkai. Saya memiliki tata letak 4-motor standar, jadi ini
Quad X.
Penerbangan pertama masih lebih baik dilakukan dalam mode manual. Kami menghubungkan dan mengkalibrasi kontrol radio (penerima dan pemancar).

Tetap mengkalibrasi accelerometer dan kompas.

Agar Ardupilot dapat melihat dan memperhitungkan data akun dari sensor eksternal, tetapkan parameter yang diperlukan:
Untuk
PX4Flow (
kalibrasi sensor itu sendiri dan pembaruan firmware )
FLOW_ENABLE = 1 (Enabled)
FLOW_ADDR = 0 (0 = 042)
Untuk laser altimeter
VL53L0X (
instruksi )
RNGFND_TYPE = 16 (VL53L0X)
RNGFND_ORIENT = 25 ( )
RNGFND_ADDR = 41 (I2C- ). - 0x29, = 41.
RNGFND_SCALING = 1
RNGFND_MIN_CM = 5
RNGFND_MAX_CM = 120
RNGFND_GNDCLEAR = 15 ( , )
Untuk
IRLock (
petunjuk terperinci ,
wiki IR-Lock )
PLND_ENABLED = 1
PLND_TYPE = 2
PLND_BUS = 1
Untuk tampilan depan sonar (
instruksi )
RNGFND2_TYPE = 2 (MaxbotixI2C sonar)
RNGFND2_ORIENT = 0 ( )
RNGFND2_MAX_CM = 700 ( )
Daftar lengkap
opsi Ardupilot.
Sekarang restart Ardupilot dari menu GCS, sambungkan kembali ke board dan buka jendela MAVLink Inspector untuk melihat data dari sensor.

Sayangnya, pembacaan IR-Lock tidak terlihat di sini, untuk analisis pekerjaannya Anda harus melihat log on-board. Cara melakukan ini dijelaskan di
sini .
Tetap mengkonfigurasi pengaturan keamanan dan Anda dapat memulai drone:

Cara mengkonfigurasi gyro-suspensi dan mengontrol kamera utama secara rinci Saya akan menulis di salah satu artikel berikut, poin utama diuraikan di
sini .
Siaran video
Mari kita periksa bagaimana penyiaran video bekerja di jaringan WiFi. Dengan perintah ini, Anda dapat menjalankan video dalam port TCP pada Raspberry menggunakan utilitas raspivid asli untuk kamera Raspicam:
raspivid -t 0 -hf -fps 25 -w 640 -h 480 -o - | gst-launch-1.0 fdsrc ! h264parse ! rtph264pay config-interval=1 pt=96 ! gdppay ! tcpserversink host=0.0.0.0 port=5001
Tetapi perintah ini melakukan hal yang sama, hanya menggunakan pembungkus rpi-camsrc yang telah dikompilasi sebelumnya untuk gstreamer:
gst-launch-1.0 rpicamsrc sensor-mode=4 ! h264parse ! rtph264pay config-interval=1 pt=96 ! gdppay ! tcpserversink host=0.0.0.0 port=5001
Dalam kedua kasus, siaran H264 tersedia di alamat IP Raspberry pada port 5001.
Anda dapat melihatnya dengan menjalankan perintah seperti itu di PC Anda (
gstreamer harus diinstal), alih-alih
RPI_ADDRESS, tentukan alamat Raspberry di jaringan:
gst-launch-1.0 -v tcpclientsrc host=RPI_ADDRESS port=5001 ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false
Akibatnya, jendela dengan video harus terbuka.
Hampir semua GCS memiliki pemutar video bawaan yang dapat menampilkan aliran video RTSP. Untuk membuat server RTSP dari Raspberry, Anda dapat menggunakan
VLC console
player . Instalasi:
sudo apt-get install vlc
Siaran video dimulai sebagai berikut:
raspivid -o - -t 0 -n -w 320 -h 240 -fps 25 | cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/live}' :demux=h264
Video tersedia di (bukan
RPI_ADDRESS , alamat Raspberry):
rtsp://RPI_ADDRESS:8554/live
Penyiapan GCS:


Alamat aliran dapat digunakan untuk menghubungkan beberapa pemain pada perangkat yang berbeda, tetapi karena menangkap dan menyiarkan video untuk Raspberry adalah proses yang sangat memakan waktu, lebih baik bagi beberapa konsumen video untuk menggunakan server eksternal (uraian di bawah).
Telemetri melalui Internet
Agar GCS dapat terhubung melalui Internet ke drone dengan alamat IP dinamis, diperlukan server perantara dengan IP statis di mana skrip MAVProxy akan diluncurkan. Untuk tujuan ini, saya mengambil keuntungan dari penyewaan server cloud dari salah satu penyedia terkenal. Untuk MAVProxy, konfigurasi paling minimal cocok, tetapi karena saya akan menggunakan server yang sama untuk menyampaikan video, saya memilih opsi dengan memori sedikit lebih banyak (satu inti dan 1GB memori, Ubuntu 18.04). Untuk keterlambatan minimum dalam lewatnya data antara board dan GCS, server harus berada dalam kedekatan geografis maksimum dengan drone dan GCS.

Instal MAVProxy di server. Ketergantungan pertama:
sudo apt-get install python-dev python-opencv python-wxgtk3.0 python-pip python-matplotlib python-pygame python-lxml python-yaml
dan kemudian skrip itu sendiri melalui PIP:
sudo pip install MAVProxy
tulis jalannya:
echo "export PATH=$PATH:$HOME/.local/bin" >> ~/.bashrc
dan jalankan skrip dengan parameter berikut:
mavproxy.py --master=udp:0.0.0.0:15001 --out=tcpin:0.0.0.0:15002
MAVProxy mendengarkan pada port 15001 untuk paket telemetri yang masuk dari drone melalui UDP, dan port 15002 untuk koneksi TCP yang masuk dari GCS.
Jalankan MAVProxy di Raspberry dengan satu parameter lagi, sehingga telemetri juga disiarkan ke server (bukan
SERVER_IP alamat server Anda):
mavproxy.py --master=udp:127.0.0.1:14550 --out=tcpin:0.0.0.0:5762 --out=udpout:SERVER_IP:15001
Setelah memulai skrip pada komputer terpasang, pesan dari autopilot akan muncul di konsol server. Seperti yang disebutkan di atas, MAVProxy adalah GCS lengkap dengan antarmuka teks dan dalam keadaan ini sudah mungkin untuk mengedit parameter dan mengontrol drone melalui
perintah di konsol server.
Hubungkan GCS pada PC atau tablet ke server. Pengaturan koneksi sama seperti untuk jaringan lokal, hanya alih-alih alamat IP Raspberry kami menentukan alamat server dan port 15002.

Sekarang Anda dapat menghubungkan modem USB 4G ke Raspberry dan mengevaluasi penundaan reaksi cakrawala di layar.
Video internet

Untuk menyampaikan video, instal pemutar VLC di server:
sudo apt-get install vlc
Setelah instalasi, jalankan sebagai relay dari port UDP 5001 di kanal RTSP
SERVER_IP: 8554 / live :
cvlc -vvv udp://@:5001 --sout '#rtp{sdp=rtsp://:8554/live}' :demux=h264
Di papan, kami akan memulai siaran video dari kamera ke server melalui UDP (bukan alamat server
SERVER_IP ):
gst-launch-1.0 rpicamsrc bitrate=1000000 ! video/x-h264,width=640,height=480,framerate=25/1 ! h264parse ! udpsink host=SERVER_IP port=5001
Alamat aliran sekarang dapat digunakan sebagai sumber video dalam pengaturan GCS atau dibuka di sembarang pemain yang mendukung protokol ini.
Sekarang Anda dapat merencanakan rute penerbangan dan meluncurkan drone melalui Internet, setelah sebelumnya menyalakannya, misalnya, menggunakan asisten telepon.
Jelas, karena waktu tempuh video dan telemetri yang relatif lama melalui jaringan, metode ini hampir tidak cocok untuk penerbangan FPV dalam mode manual antar rintangan.
Subjek untuk publikasi selanjutnya:
- Opsi untuk mengisi ulang drone di rumah burung saya dan yang mana saya berhenti.
- Menerapkan GCS berbasis web menggunakan MAVProxy, NodeJS, socket.io, dan server media untuk mengelola beberapa drone secara bersamaan.
- Saluran komunikasi berlebihan dan sistem penyelamatan drone
- Visi dan kap mesin untuk menghindari tabrakan dengan rintangan
Dilanjutkan ...