Скрипт dead reckoning: політ додому без GPS
Що пише ArduPilot:
- DR: could not get home or vehicle location
- DR: enabled
- DR: failed to change to Guided_NoGPS mode
- DR: fly home yaw:… pit:… cr:……
- DR: leveling vehicle
- DR: GPS or EKF bad
Тут пояснено ще: 7
- DR: failed to set attitude target
- DR: flying home
- DR: waiting for dist:… need:…
- DR: NEXT_MODE=-1 but fallingback to RTL
- DR: GPS and EKF recovered
- DR: pilot retook control
- DR: failed to change to mode …
Рядки, що починаються з «DR:», надсилає Lua-скрипт copter-deadreckon-home, а не прошивка. Він стежить за GPS (супутників менше за DR_GPS_SAT_MIN, точність швидкості гірша за DR_GPS_SACC_MAX) і за фейлсейфом EKF. «DR: waiting for dist» та «DR: enabled» — це норма: він напоготові, щойно коптер відлетить на DR_ENABLE_DIST метрів від дому. «DR: GPS or EKF bad» — сама подія: в Auto, Guided, RTL, Circle, Land, Brake чи SmartRTL він перемикає в Guided_NoGPS, 5 с вирівнює коптер, а потім нахиляє його на DR_FLY_ANGLE градусів у бік, де був дім («DR: flying home»). Коли GPS та EKF справні 3 с або минуло DR_FLY_TIMEOUT секунд, він перемикає в DR_NEXT_MODE.
Що робити: найімовірніше спершу
GPS справді погіршився: глушіння, спуфінг або закритий огляд неба.
ПеревіртеУ лозі — GPS.NSats і GPS.SAcc за секунди перед «DR: GPS or EKF bad», порівняно з
DR_GPS_SAT_MINіDR_GPS_SACC_MAX.ВиправтеСкрипт робить свою справу: він тримає курс, а не позицію, тож вітер зносить коптер із лінії додому. Щойно побачите коптер, перейдіть в AltHold чи Stabilize й ведіть його вручну («DR: pilot retook control»).
Пороги жорсткіші за те, що цей GPS показує у звичайний день, тож скрипт спрацьовує в нормальних польотах.
ПеревіртеПодивіться GPS.SAcc і GPS.NSats за весь нормальний політ: точність швидкості має лишатися помітно нижчою за
DR_GPS_SACC_MAX(типово 0.8), а кількість супутників — вищою заDR_GPS_SAT_MIN(6).ВиправтеЗадайте обидва пороги із запасом від того, що показують ваші логи.
DR_GPS_TRIGG_SECмав би бути часом, який GPS має лишатися поганим, але у власній копії скрипта ArduPilot його порівнюють із мілісекундами, тож він спрацьовує відразу, хай що ви задали.«DR: failed to change to Guided_NoGPS mode», «DR: failed to set attitude target» або «DR: failed to change to mode …»: коптер відмовив скрипту.
ПеревіртеРядок «Mode change to … failed: …» поруч називає причину від ArduPilot.
DR_NEXT_MODE6 (RTL) відхиляється, доки немає позиції.ВиправтеСкрипт пробує далі й тим часом лишається в Guided_NoGPS. Ведіть коптер додому вручну, а згодом виберіть
DR_NEXT_MODE, який може стартувати без позиції, якщо очікуєте, що GPS не повернеться.
Скрипту потрібні SCR_ENABLE 1 і близько 80 кБ пам'яті для скриптів (SCR_HEAP_SIZE). DR_FLY_TIMEOUT 0 означає, що він летить за курсом, доки його не зупинить фейлсейф батареї або ви. У прошивки є власний dead reckoning («Dead Reckoning started») — це інша річ.
Параметри, на які варто глянути
| Параметр | Що це |
|---|---|
DR_ENABLE | Deadreckoning Enable |
DR_ENABLE_DIST | Deadreckoning Enable Distance |
DR_GPS_SACC_MAX | Deadreckoning GPS speed accuracy maximum threshold |
DR_GPS_SAT_MIN | Deadreckoning GPS satellite count min threshold |
DR_GPS_TRIGG_SEC | Deadreckoning GPS check trigger seconds |
DR_FLY_ANGLE | Deadreckoning Lean Angle |
DR_FLY_TIMEOUT | Deadreckoning flight timeout |
DR_NEXT_MODE | Deadreckoning Next Mode |
Де це зробити:Каталог Lua-аплетівПояснення фейлсейфів
Код, який це надсилає
DR: could not get home or vehicle location
libraries/AP_Scripting/applets/copter-deadreckon-home.lua update() · Відкрити в ArduPilot Copter-4.7.1
DR: enabled
libraries/AP_Scripting/applets/copter-deadreckon-home.lua update() · Відкрити в ArduPilot Copter-4.7.1
DR: failed to change to Guided_NoGPS mode
libraries/AP_Scripting/applets/copter-deadreckon-home.lua update() · Відкрити в ArduPilot Copter-4.7.1
DR: fly home yaw:… pit:… cr:……
libraries/AP_Scripting/applets/copter-deadreckon-home.lua update() · Відкрити в ArduPilot Copter-4.7.1
І ще 9 повідомлень, що надсилаються з тих самих місць.