Setelah
bereksperimen dengan kecerdasan buatan, autopilot
tank saya memutuskan untuk mengambil langkah mundur dan belajar menavigasi satelit tua yang baik.
Gambar dipentaskan, mengisyaratkan bahwa setiap transportasi GPS dapat memanaskan sendiri di bawah kendali seorang navigator.

Raspberry Pi + GPS
Pertama, modul GPS USB sederhana dibeli.
Dipandu oleh artikel tentang
Adafrukt , saya memulai implementasi.
Terlepas dari kenyataan bahwa artikel itu ditulis 6 tahun yang lalu, tidak ada yang berubah banyak di dunia navigasi sekolah lama.
Hanya beberapa nuansa yang tidak cocok:
- potongan besi ditemukan sebagai / dev / ttyACM0 bukan / dev / ttyUSB0
- ketika menginstal gpsd, saya tidak menemukan perangkat itu sendiri, ternyata perlu untuk mendaftar di / etc / default / gpsd:
DEVICES="/dev/ACM0"
- untuk python-3 gps paket harus dikirim dengan tangan, itu tidak sesuai dengan gpsd
Perangkat itu sendiri terlihat seperti USB flash drive biasa:

Dan kemudian saya terjebak untuk waktu yang lama, karena GPS saya tidak melihat koordinat.
Perangkat berfungsi, melaporkan versi, pabrikan, dan informasi bermanfaat lainnya, tetapi tidak lebih.
Awalnya saya pikir dia masih cacat. Dari percobaan sebelumnya, saya masih punya kartu SD dari Raspbian 2017, tempat GPS bekerja.
Boot dari itu dan - lihatlah - GPS hidup kembali dan mengedipkan bola lampu, dan mandi di log log.
Saya memutar otak saya selama seminggu, membandingkan semua konfigurasi, mulai berbuat dosa pada Raspbian kereta baru dan bersiap-siap untuk membangun kembali gpsd di debug, ketika tiba-tiba di forum Raspberry di salah satu topik tentang masalah GPS (dan ada banyak dari mereka di sana) saya datang saran untuk membawa perangkat ke jalanan dalam cuaca cerah dan biarkan ia menemukan satelit, yang bisa memakan waktu hingga setengah jam.
Gagasan ini muncul di benak saya, tetapi tampaknya cuacanya tidak cukup jelas, tetapi kemudian semuanya bertepatan, dan perangkat menjadi hidup. Jika Anda menggali sedikit lebih dalam, ternyata informasi yang diperlukan tentang satelit di-cache dalam firmware perangkat dan tidak dapat dikendalikan oleh Raspbian.
Bagaimana aplikasi saya mendapatkan data almanak / ephemeris / pseudorange?
Maaf, belum ada cara mudah untuk melakukan hal-hal ini melalui GPSD. Alasannya adalah bahwa tidak ada cara yang konsisten untuk membuat penerima GPS melaporkan informasi ini.
Banyak yang tidak mengirimkannya sama sekali. Lainnya (termasuk beberapa tetapi tidak semua perangkat yang mengirim paket biner SiRF) mengirimkannya sesekali dalam informasi SUBFRAME, tetapi Anda harus tahu persis bagaimana cara merunduk melalui bidang SUBFRAME untuk mendapatkannya dan dokumentasi dari mereka yang ada di IS-GPS-200E (selengkapnya) - Protokol udara yang digunakan oleh satelit GPS) sangat tidak jelas. Yang lain melaporkan berbeda himpunan bagian dari data almanak / ephemeris / pseudorange dengan cara yang cukup mudah, tetapi dalam kalimat berpemilik vendor yang sangat spesifik untuk jenis penerima individu, buruk didokumentasikan atau tidak didokumentasikan, dan sering perlu diaktifkan oleh urutan kontrol yang sama spesifik dan bahkan lebih buruk didokumentasikan.
Mekanisme rumit telah berhasil dan sekarang saatnya untuk memanfaatkannya.
Skrip untuk membaca data dari gpsd dengan python sangat sederhana:
import gps gs = gps.gps("localhost", "2947") gs.stream(gps.WATCH_ENABLE | gps.WATCH_NEWSTYLE) for i in range(0,10): report = gs.next() print (report)
Google Maps API
Saya mengontrol tangki dari telepon, jadi saya harus belajar bekerja dengan Google Maps.
Google melakukan pekerjaan yang baik menyederhanakan pekerjaan dengan peta, jadi tidak ada masalah.
Android Studio dapat membuat proyek kosong dengan peta, dari mana perlu untuk hati-hati mentransfer semua detail penting ke proyek utama.
Google memerlukan pendaftaran
utama untuk bekerja dengan Maps API, itu dilakukan secara gratis (untuk saat ini).
Saya memperluas antarmuka REST dari tangki sehingga akan memberikan koordinatnya, mentransfer koordinat ke peta, menggambar ikon tangki dan semuanya terlihat cukup baik.
Selanjutnya Anda perlu membuka jalan.
Suatu titik di peta memilih target dan memberinya makan di
API Arah .
Petunjuk arah adalah layanan web yang mengambil koordinat dua titik dan sebagai tanggapan akan membuang banyak informasi tentang rute yang diambil, termasuk alamat, nama dan penjelasan yang patut diperhatikan. Tetapi saya hanya membutuhkan serangkaian langkah. Kami memilih koordinat dan menggambarnya di peta.
Sekarang ada semua yang diperlukan untuk kontrol dan manajemen visual.

Navigasi GPS
Lebih jauh dari ponsel ke tangki, titik pertama rute ditransmisikan.
Tangki memiliki masalah kecil - pada awalnya, ia tidak tahu arahnya.
Masalahnya mudah diselesaikan oleh kompas, tetapi siapa pun dapat menangani kompas ...
Adalah mungkin untuk keluar dengan fakta bahwa untuk beberapa detik pertama tangki melintas di depan, menerima koordinat awal dan akhir jalan dan menghitung arahnya dari mereka. Perlu dicatat bahwa data yang sama dapat diperoleh langsung dari GPS, ada bidang trek, yang menunjukkan penyimpangan dari sudut ke kutub utara.
Tetapi bagaimanapun juga, untuk mengisi ini setelahnya, diperlukan gerakan.
Perhitungan arah:
def azimuth(pos1, pos2): lat1 = toRadians(pos1["lat"]) lon1 = toRadians(pos1["lon"]) lat2 = toRadians(pos2["lat"]) lon2 = toRadians(pos2["lon"]) dlat = lat2 - lat1 dlon = lon2 - lon1 x = math.sin(dlon) * math.cos(lat2) y = math.cos(lat1) * math.sin(lat2) - math.sin(lat1) * math.cos(lat2) * math.cos(dlon) return math.atan2(x, y)
Saya perhatikan bahwa GPS tidak selalu bekerja secara akurat, dan mungkin ternyata koordinat awal dan akhir jalur uji akan dengan kesalahan yang membuat pengukuran menjadi tidak berarti (bahkan ketika bergerak maju, koordinat ujung jalur berada di belakang).
Dalam hal ini, GPS memberikan arah melalui trek dengan cukup andal, oleh karena itu bidang ini digunakan secara default, dan jika tidak ada di sana, saya harus menavigasi dengan perbedaan koordinat.
Setelah berorientasi pada medan, tangki berputar kira-kira seperlunya (kira-kira - karena sulit untuk mengukur arah secara akurat tanpa kompas atau giroskop) dan bergerak selama beberapa detik. Kemudian dia kembali menerima koordinat, memeriksa arah, belokan, wahana. Demikian seterusnya hingga target berada dalam radius kesalahan.
Secara umum, masalah terbesar adalah kesalahan dalam koordinat GPS, karena tangki kehilangan arah dan mulai bergerak ke arah yang berbeda.
Semuanya berjalan pada kenyataan bahwa tanpa kompas Anda tidak dapat bertahan hidup.
Referensi
- Artikel pengantar tentang pengaturan modul GPS untuk Raspberry Pi
- Layanan untuk bekerja dengan GPS di Linux
- Situs yang berguna dengan rumus untuk menghitung jarak dan arah dengan koordinat dua titik
- Kode sumber firmware tangki GPS
- Dokumentasi Google Maps untuk Android