GPS
GPS yolg'on koordinata beryapti: fix sifatini filtrlash
Xaritada avtomobil goh joyida, goh qirq kilometr narida ko'rinardi. Modul ishlayapti, koordinata kelyapti — muammo shundaki, u koordinata ishonchsiz edi.
Muammoning ko'rinishi
NBcaR ishga tushgach, xaritada avtomobil sakrab yurardi. Bir necha soniyada bir necha o'n kilometr "yurib" qaytardi. Avtomobil esa garajda turgan bo'lardi.
Birinchi taxmin — modul buzuq. Aslida modul to'g'ri ishlayotgan edi. Muammo mening kodimda: men har qanday koordinatani to'g'ri deb qabul qilayotgan edim.
GPS moduli nima qaytaradi
GPS qabul qilgichlari NMEA formatidagi matn qatorlarini uzatadi. Ulardan biri — $GPGGA — koordinata bilan birga uning sifatini ham bildiradi.
$GPGGA,123519,4807.038,N,01131.000,E,1,03,8.9,545.4,M,...
│ │ │
│ │ └─ HDOP
│ └───── sun'iy yo'ldosh soni
└──────── fix turi
Uchta muhim ko'rsatkich:
- Fix turi — 0 bo'lsa koordinata umuman yo'q, 1 va undan yuqori bo'lsa bor
- Sun'iy yo'ldosh soni — nechta yo'ldosh ko'rinyapti
- HDOP — gorizontal aniqlik ko'rsatkichi, kichik bo'lgani yaxshi
HDOP nima anglatadi
HDOP — yo'ldoshlarning osmondagi joylashuvi qanchalik qulay ekanini ko'rsatadi. Agar ular osmon bo'ylab keng tarqalgan bo'lsa, kesishma nuqta aniq chiqadi. Agar hammasi bir tomonda to'planib qolsa, kesishma cho'zilib ketadi va xato oshadi.
| HDOP | Sifat | Amalda |
|---|---|---|
| < 2 | Zo'r | Navigatsiya uchun yetarli |
| 2–5 | Yaxshi | Kuzatuv uchun to'g'ri keladi |
| 5–10 | O'rtacha | Xato o'nlab metr |
| > 10 | Yomon | Ishonib bo'lmaydi |
Mening sakrab yuruvchi nuqtalarim aynan HDOP 12–20 oralig'idagi o'lchovlar edi. Modul ularni to'g'ri belgilagan, men esa belgini o'qimagan edim.
Filtr
Yechim oddiy — koordinatani qabul qilishdan oldin uchta shartni tekshirish:
const uint8_t MIN_SATS = 4;
const float MAX_HDOP = 5.0;
bool fixIsGood() {
if (!gps.location.isValid()) return false;
if (gps.satellites.value() < MIN_SATS) return false;
if (gps.hdop.hdop() > MAX_HDOP) return false;
if (gps.location.age() > 2000) return false;
return true;
}
To'rtinchi shart — age() — kam eslanadi, lekin muhim. TinyGPS++ oxirgi ma'lum koordinatani saqlab turadi. Agar modul signalni yo'qotsa, kutubxona eski qiymatni qaytaraverdi va siz uni yangi deb o'ylaysiz. Ikki soniyadan eski ma'lumotni tashlab yuborish kerak.
Nima uchun kamida 4 ta yo'ldosh: uchtasi bilan faqat kenglik va uzunlik hisoblanadi, to'rtinchisi vaqt xatosini tuzatish uchun kerak. Uchta yo'ldosh bilan olingan koordinata rasmiy jihatdan to'g'ri, amalda esa ishonchsiz.
Natija. Filtr qo'yilgandan keyin sakrash butunlay to'xtadi. Koordinata biroz kamroq tez-tez yangilanadigan bo'ldi, lekin har bir nuqta ishonchli.
Eski nuqtani ko'rsatish
Filtr o'tmaganda nima qilish kerak? Ikki variant bor va tanlov vazifaga bog'liq.
Avtomobil kuzatuvi uchun men oxirgi yaxshi nuqtani saqlab turishni tanladim. Foydalanuvchiga "avtomobil shu yerda edi" deb ko'rsatish, "joylashuv noma'lum" deyishdan foydaliroq. Lekin vaqt belgisi bilan birga:
{
"lat": 38.2733,
"lon": 67.8942,
"sats": 7,
"hdop": 1.8,
"fresh": false,
"agoSec": 142
}
Ilovada esa eski nuqta boshqa rangda va "2 daqiqa oldin" yozuvi bilan ko'rsatiladi. Foydalanuvchi ma'lumot qanchalik yangi ekanini biladi va o'zi qaror qabul qiladi.
Sovuq start
Yana bir kutilmagan narsa: modul birinchi marta yoqilganda koordinata topishga 30 soniyadan bir necha daqiqagacha vaqt ketadi. Bu normal — u yo'ldoshlar jadvalini yuklab olishi kerak.
Agar qurilma tez-tez o'chib-yonsa, har safar shu kutish takrorlanadi. Yechim — GPS modulini doimiy quvvatda saqlash yoki batareya bilan ta'minlangan modul ishlatish, u holda jadval saqlanib qoladi va start bir necha soniyaga qisqaradi.
Antenna joylashuvi
Kod qanchalik to'g'ri bo'lmasin, antenna noto'g'ri joylashsa natija yomon bo'ladi. Amaliy kuzatuvlarim:
- Antenna osmonga qaragan bo'lishi kerak, yon tomonga emas
- Metall ustida ishlaydi, metall ostida ishlamaydi
- Torpedo ostida — yomon, shisha oldida — yaxshi
- SIM800L antennasidan uzoqroq qo'ying, GSM uzatishi GPS ni bo'g'adi
Oxirgi punkt menda bir kun vaqt oldi: GSM xabar yuborilgan har safar GPS aniqligi keskin tushardi. Ikki antennani 15 santimetr uzoqlashtirish muammoni hal qildi.
Xulosa
GPS moduli sizga koordinata bilan birga uning sifati haqida ham xabar beradi. Bu ma'lumotni e'tiborsiz qoldirish — xaritada sakrab yuruvchi nuqtalar demakdir.
Ikkita raqamni tekshiring: yo'ldosh soni va HDOP. Bu ikki qator kod tizimning ishonchliligini butunlay o'zgartiradi.