Меню

High gps hdop ошибка apm

Предварительная проверка безопасности при снятии с охраны (Pre-arm Check)

APM с прошивкой 3.0.1 (и выше) включает в себя предварительную проверку безопасности при снятии с охраны,
которая приводит к тому, что одна из проблем была выявленна:

  • Проверяет, что была выполнена калибровка Радио.
  • Проверяет, что была выполнена калибровка акселерометра.
  • Проверяет, что компас здоровый и правильно передает данные.
  • Проверяет, что смещение компасе не слишком большое (т.е. корень SQRT (х ^ 2 + у ^ 2 + Z ^ 2) <500).
  • Проверяет, что калибровка на живую компаса или на базе журналирования была выполнена или что «COMPASS_LEARN» включен.
  • Проверяет адекватное напряжение магнитного поля: (APM1/APM2 около 330, PX4/Pixhawk около 530)
  • Проверяет, что барометр здоровый и правильно обменивается данными.
  • Если круговая ограда (Fence) включена или снимаете с охраны в режиме Loiter проверка безопасности проверяет, что:
    • у вас есть фиксация спутников по GPS
    • параметр GPS HDOP < 2.0 (настраивается параметр GPS_HDOP_GOOD)
  • Путевая скорость меньше 50 см / сек
  • Проверяет, что полетный контроллер питается между 4,5 и 5,5 вольт для АРМ 1 или АРМ 2
  • Проверяет, что 7 и 8 канал не настроен на управление на одну и ту же функцию.
  • Если включен Radio FailSafe проверяет минимальное значение стика газа канала не ниже FS_THR_VALUE
  • Проверяет параметр ANGLE_MAX (т.е. максимальный угол наклонав большинстве режимов) является больше 10 и меньше 80 градусов
  • Проверяет уровень PWM по четырем первым каналам , если они меньше 1300 и не больше 1700

Если все остальное нормально, за исключением того,
когда вы пытаетесь снять с охраны (Arming) стиком газа вниз и вправо (режим Mode2 на аппаратуре),
он будет на самом деле не сниматься с охраны и двигатели не будут вращаться он, вероятно,
не прошел проверку Pre-Arm безопасности.

Вы должны заметить, что красный светодиод будет мигать двумя быстрыми вспышками по кругу.


Видео с подробным описанием Pre-Arm safety check


Отключение Pre-Arm Safety Check

Если вы уверены, что проверка на сбок не настоящая проблема вы можете отключить её:

  • Подключение APM к Mission Planer
  • Зайдите в раздел Config/Tuning -> Standart Params
  • установитe Pre-Arm Check на значение «Disabled» или, если вы используете AC3.1 (или выше),
    вы можете пропустить этот пункт, который вызывает сбой.
  • Нажмите кнопку «Write Params»

В идеале вы должны определить
причину сбоя Pre-Arm,
и если она может быть решена,
верните этот параметр к исходному положению — «Enabled»


Чтобы понять, что вызвало сбой Pre-Arm Check:

  • Подключите свой полетный контроллер к компьютеру через порт USB.
  • Запустите Mission Planner и соединитесь с ArduPilot нажав кнопку «Connect» в правом верхнем углу.
  • Включите аппаратуру радиопередатчика и удерживайте стик газа вниз и вправо (процедура постановки на охрану — Disarm).
  • Первый причиной проверки отказа Pre-Arm безопасности будет отображаться красным цветом в окне HUD Mission Planner.
  • Каждая проблема и адрес будет сообщаться при попытке снять с охраны, как указано выше.
  • Когда все проблемы были исправлены, вы увидите проверку «снятия с охраны» (Pre-Arm Check) в окне HUD.
  • После этого можно отключить от компьютера и имеють хорошую гарантию того,
    что снятие с охраны (arming) будет происходить в обычном режиме.

Устранение проблем предварительной проверки снятия с охраны (Pre-arm fix):

  • Если не прошла проверка Радио rалибровки — сделайте повторно калибровку радио .
  • Если не прошла проверка калибровки акселерометра — сделайте повторно калибровку акселерометра .
  • Если происходит сбой компаса — сделайте заново живую калибровку компаса .
  • Если проверка барометра (высотомера) не работает, то ваш контроллер скорее всего имеет
    аппаратную проблему с барометром.
  • Если проверка позиция GPS не удалась
    • ждать HDOP вашего GPS, чтобы он опустился ниже 2.0,
      прежде чем пытаться снимать с охраны. Вы можете сделать
      это более легко — наблюдая в области быстрого экрана Mission Planner.
    • Отключите Geofence в Config/Тюнинг -> Geofence
    • Снимите с охраны (arming) в полетный режим Стабилизации (Stabilize mode) и позже перейдите в режим Loiter
      (этот режим (loiter) не рекомендуется на момент старта, потому что хорошая фиксация
      по спутникам GPS требуется для Loiter и
      HDOP является хорошим показателем того, что GPS позиция хороша)
    • увеличить параметр GPS_HDOP_GOOD от 200 до 250
      (это также не рекомендуется по тем же причинам, что и выше)
  • Если проверка напряжения питания полетного контроллера не успешная:
    • проверить UBEC , который используется для подачи напряжения на АРМ
      напряжение должно быть между 4,5 и 5,5 вольт (чем ближе к 5V, тем лучше)
    • проверить, если какие-либо периферийные устройства,
      которые питаются от АРМ и имеют слишком высокий потребляемый ток.
  • Если на канал 7 и 8 было установлено тоже самое (одинаковая функция) измените один из них с помощью Mission Planner Config/Тюнинг -> PIDS

  1. toljapa

    toljapa
    Студент

    Регистрация:
    25 июл 2016
    Сообщения:
    208
    Город:
    миасс
    Имя:
    анатолий

    здравствуйте ,у меня вопрос по GeoFence,настроил ,не дает запустить винты .пишет ошибки по GPS ,один раз удалось запустить ,не надолго.Я уже вычитал ,что лечится выключением GeoFence.,но хотелось пользоваться этой функцией .есть какое -то решение?


  2. raefa

    raefa
    Главнокомандующий
    Команда форума

    При арминге задается точка дом и относительно нее по радиусу и высоте высчитывается доступная зона полета.
    Давайте посмотрим на ошибки.


  3. toljapa

    toljapa
    Студент

    Регистрация:
    25 июл 2016
    Сообщения:
    208
    Город:
    миасс
    Имя:
    анатолий

    хотел обезопасить себя «забором» ,я зашел в GeoFence ,включил «Enable»,в настройках поставил «Altitude и Circle» и «RTL»,все остальное оставил без изменений ,Max Alt вроде 100,а радиус 300.
    «Pre-Arm Check «пишет и»gps high «и чего то там … посмотрю когда приду домой .винты не запускались ,пока не отключил «Enable»,правда ради интереса спустился из дома вниз для проверки .винты запустились на расстоянии от дома ,потом попытался запустить на площадке ,без результата .

    — Сообщения объединены, 12 сен 2017

    сейчас вернулся ,блин ,глюк при взлете: коптер кренится все больше набок ,не успеешь оторваться от земли ,винтам каюк -падает назад.проще всего взлетать и садиться на автомате ,аккуратно это делает .

    — Сообщения объединены, 12 сен 2017

    …без моего участия ,копец обидно .отлетал пол-часа все отлично ,а потом на стабе при отрыве от земли ,винты вдрызь об асфальт.

    Последнее редактирование: 12 сен 2017


  4. toljapa

    toljapa
    Студент

    Регистрация:
    25 июл 2016
    Сообщения:
    208
    Город:
    миасс
    Имя:
    анатолий

    так вот пишет :»Pre-Arm:BAD Velocity» при арминге и иногда вылазит:Pre-Arm:»high gps Hdop»

    — Сообщения объединены, 13 сен 2017

    менять что-то в параметрах или помехи мешают ? мой gps 160 -140 мм от верхн деталей коптера.

  5. High gps пишет когда поймал или мало спутников или неустойчивый прием,соответственно малая точность измерения

    — Сообщения объединены, 21 сен 2017

    Если на стабе валиться на бок надо ещё раз и аккуратно провести калибровку акселей и сделать save trim


  6. toljapa

    toljapa
    Студент

    Регистрация:
    25 июл 2016
    Сообщения:
    208
    Город:
    миасс
    Имя:
    анатолий

    возможно ,когда я долго держал арминг (иногда долго не запускались движки )я ввел в режим автотрим , а полет после был аварийным и как то повлияло на регулировку акселей .стоит взлететь и все нормально .я уже взлетаю и сажаю только с рук(может перевернуться и при посадке)

    — Сообщения объединены, 28 сен 2017

    кстати ,я отлетал с» невидимым забором и потолком» ,это было вдали от города ,потом только заметил ,когда домой пришел .,что забыл отключить геофенс.,еще понять не мог почему коптер высоко поднять не могу .

    Последнее редактирование: 28 сен 2017

  7. Расколбас при fs, сегодня улетел за пределы радиуса папы и включился fs, при этом аппарат сдорово качнуло,примерно градусов на 30, когда подлетел поближе переключился на альт хольд, раскачки не было,опять загнал подальше ,опять сработал fs, и опять качнуло, правда было где-то два наклона по осям но ощутимые, так должно быть или что то не так?

  8. Качает один раз? Это он просто так резко разворачивается

  9. Ну в общем да один раз качает

    — Сообщения объединены, 25 окт 2017

    Пересмотрел видео, кивок вверх носом с резким поворотом градусов на 40


  10. raefa

    raefa
    Главнокомандующий
    Команда форума

    Правильно понимаю, что настроен и сработал режим GeoFence?

  11. Нет,режим выключен,сработало по потере связи с пультом


APM Copter Forum

А давайте обсудим Arducopter — APM

macrokernel

Ну я победил вибрацию по z силиконовыми колечками под моторы,за одно и выкосы ими же задал

А можно фото, пожалуйста?

Под виброплощадку 20-50 грамм плоского свинца снизу притянуть двумя тонкими хомутами

Под верхнюю пластину виброплощадки?

arb

На стенде убираются полностью, а на раме мне APM выдаёт повышенные вибрации по Z. Получается, либо лопасти винта не симметричны и я просто грузиками загнал X,Y в середину.
Неспешный полёт в loiter, ветра почти нет

Очень похоже на резонанс. Это или рама делает или площадка под АРМ из-за слишком мягкого силикона.
Попробуйте в руке запустить. Что почувствует рука. Только осторожно. Выложите фото рамы: крепление луча , мотора , АРМ. Может что видно будет.

OTR1UM

Товарищи, слегка наркоманский вопрос.
Имеется Cheerson CX-20.
Прикол в том, что если обновить прошивку APM или просто поставить неоригинальную, то тут же слетает телеметрия и OSD, т.е. прекращает свое существование порт UART’а, который распаян на плате ввода-вывода.
Вопрос вот в чем. У атмеги2560 3 аппаратных порта UART (12, 13 ноги, 63, 64 и 45, 46). А еще программно можно создать хоть сотню портов, задействовав обычные пины портов ввода-вывода (способ для извращенцев).
И вот мне интересно, какого члена пропадает порт. Варианта 2:

  1. В не оригинальной (обычной) прошивке APM использует другой аппаратный порт (например порт 2 вместо порта 1), но (!) оба порта аппаратные.
  2. Китайские долбоящеры, которые кодили прошивку, создали виртуальный (программный порт), которого нет в обычном APM, поэтому при обновлении он исчезает.
    Лично я склоняюсь ко 2 варианту.
    Может у кого-нибудь есть информация на этот счет?

И еще вопрос — какой из портов UART’а использует обычная прошивка APM, 3.2.1. например? Или все 3 сразу?
Просто хочется обновиться и не просрать телеметрию.

usup

думаю и загрузчик 2560 нужно менять

alekcandr47

Помогите пожалуйста выдает вот эти ошибки prearm: high gps hdop
(Вот эта вообще раз за разом вылазиет-prearm: bad velocity) Квадрокоптер не армится. спутники ловит 11-17

minii

Пропадает телеметрия или порт? Это разные вещи. Телеметрия — набор данных определенного формата.
Получатель данных телеметрии (тот же OSD) могут не понимать формат, хотя данные есть. Если там стоит родная для Cheerson CX-20 OSD, то может у нее нестандартный формат данных, и в прошивке именно он изменен, а не порт.

При таком кол-ве спутников вообще-то hdop не должен быть высоким. Т.е. когда вы видите 11 спутников hdop уже нормальный скорее всего.
velocity — это скорость, которая вычисляется в т.ч. по GPS.
Оба сообщения связаны с проблемой GPS, причем, может одной и той же.
Вы перед армом ждете загорания зеленого или нет? Если нет, то получение этих ошибок — ожидаемое поведение.

alekcandr47

орая вычисляется в т.ч. по GPS.
Оба сообщения связаны с проблемой GPS, причем, может одной и той же.
Вы перед армом ждете загорания зеленого или нет? Если нет, то получение этих ошибок — ожидаемое поведение.

Да жду. сейчас уже полчаса стоит на балконе и до сех пор моргает эта надпись. спутники ловит все… что за проблема с гпс может быть?

minii

Например, что стоит на балконе. Для хорошего hdop нужна большая часть открытого неба, и даже не кол-во спутников.

По-идее, 3.2.1 использует все 3 UART (GPS + Telemetry 1 + Telemetry 2). Но реально не смотрел.

OTR1UM

Пропадает телеметрия или порт? Это разные вещи. Телеметрия — набор данных определенного формата.
Получатель данных телеметрии (тот же OSD) могут не понимать формат, хотя данные есть. Если там стоит родная для Cheerson CX-20 OSD, то может у нее нестандартный формат данных, и в прошивке именно он изменен, а не порт.

Там всё максимально универсально с классическим APM, просто своя трассировка плат контроллера и добавлены 2 функции — “особый” порт под телеметрию и возможность входа в режим калибровки через правый стик (она мне лично нахрен не нужна).
Телеметрия — копия 3DRовской. OSD — MinimOSD.
Поэтому версия с форматом наверное отпадает.
Пропадает порт, пины порта (TX и RX) переходят или в Z-состояние, или в 0 (точно не помню), но уровень на них становится линейным, цифровые данные не идут.
После этого остается возможность подпаяться напрямую к лапам атмеги и восстановить телеметрию.

Я вот почему решил этим заняться.
2 месяца назад подключил телеметрию (фейк 3dr 433мгц), она работала исправно.
Недели 1.5 назад подключил OSD (MinimOSD), причем сначала подключил неправильно — к OSD шел пин RX а не TX.
Потом я перепаял этот пин, но возникла странная ситуация:

  1. OSD начинал видеть данные только после коннекта телеметрии (именно после установки соединения МП и АПМ в МП)
  2. Через 4-5 минут работы OSD теряло данные, писало NoMavData, и что характерно — отваливалась и телеметрия тоже.
    Глючное OSD я отключил, но проблема с модемами телеметрии осталась — в рандомные моменты времени они отказываются соединяться и всё. Т.е. модемы соединены и настроены, а МП к АПМ не может подключиться. Перезагрузка не помогает.
    Вчера например я отлетал 3 аккума и телеметрия ни разу не смогла соединиться.
    Поэтому я и решил копать в сторону смены прошивки.

alekcandr47

Я выходил на улицу. ловил спутники. спутники все поймал. стала на планшете выходить надпись раз за разом prearm: bad velocity Потом я всетаки завел его и поднял в режиме альтхольт. потом переключил в режим лоутер и квадрик стал лететь в бок. .

minii

Вообще-то у 2560 4 железных UART.

По-поводу GPS логи надо смотреть. Найдите на улице место, откуда видно много неба.

OTR1UM

Вообще-то у 2560 4 железных UART.

Вы правы. Я забыл про нулевой порт.
На каком из этих портов можно поймать данные для OSD / телеметрии?
При условии стандартной прошивки (не чирсоновской)
Я попробую прозвонить свой порт с этими пинами, вдруг он у меня железный, а не программный.

alekcandr47

По-поводу GPS логи надо смотреть. Найдите на улице место, откуда видно много неба.

Хорошо. я завтра пойду в поле. попробую там запустить… если так же будет… я напишу вам

ctakah

“Bad velocity” — Accelerometer calibration was successfull, at home in room temperature was everything alright-Акселерометр калибровка была успешной, дома в комнатной температуре было все в порядке.Совсем запутался, я по памяти думал на баро,а тут совсем другое,извиняюсь за заблуждение.Короче , Александр, перекалиброваться попробовать на кубике , я так делаю когда совсем ничего не помогает , то есть выдержать все градусы максимально возможно,проверить питание (должно быть 4.9-5.2 В ) и смотреть как летает.И насчет хдопа,в том же фул листе добавил значение хдопа с 230 до 280- то есть если хдоп 2.8 и выше начинает орать , опыт полетов показал,что вполне зватает 2.8…

И самое главное,не любит вибраций арм, у меня в лоитере скакал по высоте,убрал вибрации-повис четко.

Denis87

думаю и загрузчик 2560 нужно менять

Вот мне всегда было интересно, причем тут загрузчик, он же только передает управление выше и все? Как он связан с ком портами? Это как поменять LILO на grub на ПК. Нет?

Поэтому я и решил копать в сторону смены прошивки.

Было то же самое, когда собирал первый квадр, телеметрия ну никак не хотела работать, или включалась как только установлена связь по радиомодему. Купил вторую OSD — не помогло, купил APM 3.1 — помогло. Думал у меня APM 2.6 какой-то бракованный, но потом само все заработало, вроде я ничего не делал, разве что прошивку обновлял. Так и не понял что это было.

alekcandr47

“Bad velocity” — Accelerometer calibration was successfull, at home in room temperature was everything alright-Акселерометр калибровка была успешной, дома

Извиняюсь, я не много не понял о какой температуре идет реч? не могли бы вы подрбнее описать, как это на кубике? спасибо.

Агроном

мужики, нужен совет.
квадрокоптер, моторы 2212, 920кв. Через пластину
расстояние между осями 50 см.
Винты 10х4,5
мозг ДевоМ (тот самый ардукоптер). Приклеены через вибропоглощающую прокладку.

Как ни настраиваю пиды, что автотюном, что вручную, есть две проблемы.

  1. В полете в стабилайз или альтхолд “полный вперед” идет падение высоты.
  2. при висении в лоитер при порывах ветра или при кручении вокруг оси, начинает теряться, болтаться, не держать позицию.
    Уже задолбался. Где копать?
    Пиды сейчас такие

minii

Bad velocity — температура не при чем.
Bad velocity может означать плохие данные GPS или очень плохую калибровку акселерометра (на счет последнего сомневаюсь, что это реально достичь). Но при сообщении о плохом hdop это скорее всего GPS. Добейтесь работы GPS, Bad velocity скорее всего уйдет.

По-поводу boot loader: вообще-то основное его назначение в микроконтроллерах AVR — перепрошивка основной программы. Теоретически в нем может быть и другой код, но я считаю это маловероятным — когда делается код под разные платформы (как ArduCopter), то обычно стараются унифицировать как можно больше. А перенос части аппликационного кода в bootloader — это противоположная задача.

К Bad velocity, наверное, может приводить движение или сильная вибрация коптера во время инициализации. Сразу после включения питания его нельзя шевелить несколько секунд.

alekcandr47

Bad velocity может означать плохие данные GPS или очень плохую калибровку акселерометра (на счет последнего сомневаюсь, что это реально достичь)

Попробую завтра все перенастроить и выйду в поле опробовать. посмотрю что будет
если что напишу вам в личку

OTR1UM

Было то же самое, когда собирал первый квадр, телеметрия ну никак не хотела работать, или включалась как только установлена связь по радиомодему. Купил вторую OSD — не помогло, купил APM 3.1 — помогло. Думал у меня APM 2.6 какой-то бракованный, но потом само все заработало, вроде я ничего не делал, разве что прошивку обновлял. Так и не понял что это было.

Главный трабл в том, что OSD убил мне телеметрию.
Раньше она работала прекрасно. Софт v3.1.2.
Видимо придется забить болт и обновиться до обычной 3.2.1.
К лапам атмеги как-нибудь припаяюсь.

minii

Не мог OSD убить телеметрию. OSD — читатель, и если он правильно припаян, на выходы UART не влияет. Чтобы UART как-то так сгорел, что плохой сигнал выдает — не верится что-то. Либо сгорел, либо — нет. Осциллографом или цифроанализатором бы посмотреть, что там.

This both is an Error is PreArm error of the Mission planner. This error showing means you are using an APM or pixhawk flight controller.

Errors: 

  1. PreArm: Need 3D Fix

  2. PreArm: High GPS HDOP

Why this error is shown in the mission planner?

Both errors are related to the GPS. When GPS has not 3D fixed at that time you will face this error and when the GPS HDOP value is more than 2 at that time you will receive this error. if you are looking good quality GPS module then the drone will take less time to connect with GPS and your drone will quickly be ready to arm.

Note: this both errors you will face if you are using Loiter mode or flight mode which required GPS.

Many times people face this issue even if they are not using Loiter mode but they are facing the same error. It happens due to the GEO fence. You need to Disable Geofence.

What is Geo-fence:

Geo fence helps you to control your drone to fly in a specific area if the drone will go outside of provided area then Geo-Fence will be on and the Drone mode will automatically change to the RTL and then after it will automatically land at the takeoff location.

You will get more details about Geo-fence here. https://ardupilot.org/copter/docs/common-ac2_simple_geofence.html

How to disable Geo-fence?

Go to Config/tuning → GeoFence → ( Uncheck   Enabled).

You can also Edit Geofence data like type, Action, Alt, Radius.

If you have any questions related to the drone please leave a comment below. 

Pre-Arm Safety Checks

ArduPilot includes a suite of Pre-arm Safety Checks which will prevent the
vehicle from arming its propulsion system if any of a fairly large number of issues are
discovered before movement including missed calibration, configuration
or bad sensor data. These checks help prevent crashes or fly-aways but
they can also be disabled if necessary.

..  youtube:: gZ3H2eLmStI
    :width: 100%

Recognising which Pre-Arm Check has failed using the GCS

The pilot will notice a pre-arm check failure because he/she will be
unable to arm the vehicle and the notification LED, if available, will be flashing yellow. To
determine exactly which check has failed:

  1. Connect the Autopilot to the ground station using a USB cable
    or :ref:`Telemetry <common-telemetry-landingpage>`.
  2. Ensure the GCS is connected to the vehicle (i.e. on Mission
    Planner and push the «Connect» button on the upper right).
  3. Turn on your radio transmitter and attempt to arm the vehicle
    (regular procedure is using throttle down, yaw right or via an RCx_OPTION switch)
  4. The first cause of the Pre-Arm Check failure will be displayed in red
    on the HUD window

Pre-arm checks that are failing will also be sent as messages to the GCS while disarmed, about every 30 seconds. If you wish to disable this and have them sent only when an attempt arm fails, then set the :ref:`ARMING_OPTIONS<ARMING_OPTIONS>` bit 1 (value 1).

Failure messages

Failsafes:

Any failsafe (RC, Battery, GCS,etc.) will display a message and prevent arming.

RC failures:

RC not calibrated : the :ref:`radio calibration <common-radio-control-calibration>` has not been
performed. :ref:`RC3_MIN<RC3_MIN>` and :ref:`RC3_MAX<RC3_MAX>` must have been changed from their
default values (1100 and 1900), and for channels 1 to 4, MIN value must be 1300 or less, and MAX value 1700 or more.

Barometer failures:

Baro not healthy : the barometer sensor is reporting that it is
unhealthy which is normally a sign of a hardware failure.

Alt disparity : the barometer altitude disagrees with the inertial
navigation (i.e. Baro + Accelerometer) altitude estimate by more than 1
meters. This message is normally short-lived and can occur when the
autopilot is first plugged in or if it receives a hard jolt
(i.e. dropped suddenly). If it does not clear the :ref:`accelerometers may need to be calibrated <common-accelerometer-calibration>` or there may
be a barometer hardware issue.

Compass failures:

Compass not healthy : the compass sensor is reporting that it is
unhealthy which is a sign of a hardware failure.

Compass not calibrated : the :ref:`compass(es) has not been calibrated <common-compass-calibration-in-mission-planner>`. the
COMPASS_OFS_X, _Y, _Z parameters are zero or the number or type of
compasses connected has been changed since the last compass calibration
was performed.

Compass offsets too high : the primary compass’s offsets length
(i.e. sqrt(x^2+y^2+z^2)) are larger than 500. This can be caused by
metal objects being placed too close to the compass. If only an
internal compass is being used (not recommended), it may simply be the
metal in the board that is causing the large offsets and this may not
actually be a problem in which case you may wish to disable the compass
check.

Check mag field : the sensed magnetic field in the area is 35%
higher or lower than the expected value. The expected length is 530 so
it’s > 874 or < 185. Magnetic field strength varies around the world
but these wide limits mean it’s more likely the :ref:`compass calibration <common-compass-calibration-in-mission-planner>` has not
calculated good offsets and should be repeated.

Compasses inconsistent : the internal and external compasses are
pointing in different directions (off by >45 degrees). This is normally
caused by the external compasses orientation (i.e. :ref:`COMPASS_ORIENT<COMPASS_ORIENT>`
parameter) being set incorrectly.

GPS related failures:

GPS Glitch : the :ref:`GPS is glitching <gps-failsafe-glitch-protection>` and the vehicle
is in a flight mode that requires GPS (i.e. Loiter, PosHold, etc) and/or
the :ref:`cylindrical fence <common-ac2_simple_geofence>` is enabled.

Need 3D Fix : the GPS does not have a 3D fix and the vehicle is in a
flight mode that requires the GPS and/or the :ref:`cylindrical fence <common-ac2_simple_geofence>` is enabled.

Bad Velocity : the vehicle’s velocity (according to inertial
navigation system) is above 50cm/s. Issues that could lead to this
include the vehicle actually moving or being dropped, bad accelerometer
calibration, GPS updating at below the expected 5hz.

High GPS HDOP : the GPS’s HDOP value (a measure of the position
accuracy) is above 2.0 and the vehicle is in a flight mode that requires
GPS and/or the :ref:`cylindrical fence <common-ac2_simple_geofence>` is enabled.
This may be resolved by simply waiting a few minutes, moving to a
location with a better view of the sky or checking sources of GPS
interference (i.e. FPV equipment) are moved further from the GPS.
Alternatively the check can be relaxed by increasing the :ref:`GPS_HDOP_GOOD<GPS_HDOP_GOOD>`
parameter to 2.2 or 2.5. Worst case the pilot may disable the fence and
take-off in a mode that does not require the GPS (i.e. Stabilize,
AltHold) and switch into Loiter after arming but this is not
recommended.

Note: the GPS HDOP can be readily viewed through the Mission Planner’s
Quick tab as shown below.

../../../images/MP_QuicHDOP.jpg

INS checks (i.e. Acclerometer and Gyro checks):

INS not calibrated: some or all of the accelerometer’s offsets are
zero. The :ref:`accelerometers need to be calibrated <common-accelerometer-calibration>`.

Accels not healthy: one of the accelerometers is reporting it is not
healthy which could be a hardware issue. This can also occur
immediately after a firmware update before the board has been restarted.

Accels inconsistent: the accelerometers are reporting accelerations
which are different by at least 1m/s/s. The :ref:`accelerometers need to be re-calibrated <common-accelerometer-calibration>` or there is a
hardware issue.

Gyros not healthy: one of the gyroscopes is reporting it is
unhealthy which is likely a hardware issue. This can also occur
immediately after a firmware update before the board has been restarted.

Gyro cal failed: the gyro calibration failed to capture offsets.
This is most often caused by the vehicle being moved during the gyro
calibration (when red and blue lights are flashing) in which case
unplugging the battery and plugging it in again while being careful not
to jostle the vehicle will likely resolve the issue. Sensors hardware
failures (i.e. spikes) can also cause this failure.

Gyros inconsistent: two gyroscopes are reporting vehicle rotation
rates that differ by more than 20deg/sec. This is likely a hardware
failure or caused by a bad gyro calibration.

Board Voltage checks:

Check Board Voltage: the board’s internal voltage is below 4.3 Volts
or above 5.8 Volts.

If powered through a USB cable (i.e. while on the bench) this can be
caused by the desktop computer being unable to provide sufficient
current to the autopilot — try replacing the USB cable.

If powered from a battery this is a serious problem and the power system
(i.e. Power Module, battery, etc) should be carefully checked before
flying.

Parameter checks:

Ch7&Ch8 Opt cannot be same: :ref:`Auxiliary Function Switches <channel-7-and-8-options>` are set to the same option which is not permitted because it could lead to confusion.

Check FS_THR_VALUE: the :ref:`radio failsafe pwm value <radio-failsafe>` has been set too close to the throttle channels (i.e. ch3) minimum.

Check ANGLE_MAX: the :ref:`ANGLE_MAX<ANGLE_MAX>` parameter which controls the
vehicle’s maximum lean angle has been set below 10 degrees (i.e. 1000)
or above 80 degrees (i.e. 8000).

ACRO_BAL_ROLL/PITCH: the :ref:`ACRO_BAL_ROLL<ACRO_BAL_ROLL>` parameter is higher than
the Stabilize Roll P and/or :ref:`ACRO_BAL_PITCH<ACRO_BAL_PITCH>` parameter is higher than
the Stabilize Pitch P value. This could lead to the pilot being unable
to control the lean angle in ACRO mode because the :ref:`Acro Trainer stabilization <acro-mode_acro_trainer>` would overpower the pilot’s
input.

Battery/Power Monitor:

If a power monitor voltage is below its failsafe low or critical voltages or failsafe remaining capacity low or critical set points, this check will fail and indicate which set point it is below. It will also fail if these set points are inverted, ie critical point is higher than low point. See :ref:`failsafe-battery` for Copter, :ref:`apms-failsafe-function` for Plane, or :ref:`rover-failsafes` for Rover for more information on these.

In addition, minimum arming voltage and remaining capacity parameters for each battery/power monitor can be set, for example :ref:`BATT_ARM_VOLT<BATT_ARM_VOLT>` and :ref:`BATT_ARM_MAH<BATT_ARM_MAH>` for the first battery, to provide a check that the battery is not only above failsafe levels, but also has enough capacity for operation.

Airspeed:

If an airspeed sensor is configured, and it is not providing a reading or failed to calibrate, this check will fail.

Logging:

Logging failed: Logging pre-armed was enabled but failed to write to the log.

No SD Card: Logging is enabled, but no SD card is detected.

Safety Switch:

Hardware safety switch: Hardware safety switch has not been pushed.

System:

Param storage failed: A check of reading the parameter storage area failed.

Internal errors (0xx): An internal error has occurred. Report to ArduPilot development team here

KDECAN Failed: KDECAN system failure.

DroneCAN Failed: DroneCAN system failure.

Mission:

See :ref:`ARMING_MIS_ITEMS<ARMING_MIS_ITEMS>`

No mission library present: Mission checking is enabled, but no mission is loaded.

No rally library present: Rally point checking is enabled, but no rally points loaded.

Missing mission item: xxxx: A required mission items is missing.

Rangefinder:

IF a rangefinder has been configured, a reporting error has occurred.

Disabling the Pre-arm Safety Check

Warning

Disabling pre-arm safety checks is not recommended. The cause of the pre-arm failure should be corrected before operation of the vehicle if at all possible. If you are confident that the pre-arm check failure is not a real problem, it is possible to disable a failing check.

Arming checks can be individually disabled by setting the :ref:`ARMING_CHECK<ARMING_CHECK>` parameter to something other than 1. Setting to 0 completely removes all pre-arm checks. For example, setting to 4 only checks that the GPS has lock.

This can also be configured using Mission Planner:

../../../images/MP_PreArmCheckDisable.png

  • Connecting your Autopilot to the Mission Planner
  • Go to Mission Planner’s Config/Tuning >> Standard Params screen
  • set the Arming Check drop-down to «Disabled» or one of the «Skip»
    options which more effectively skips the item causing the failure.
  • Push the «Write Params» button

каталог

  • каталог
  • резюме
  • Первое: введение в предпродажную подготовку
  • Второе: уведомление об ошибке перед включением
    • 1. Подготовка перед использованием
      • Причины невозможности разблокировки с помощью анализа информации Pre-Arm:
    • 2. Причины сбоя разблокировки
    • 3. Причина сбоя разблокировки (переведите ее на официальный сайт)
    • # 1 проверка безопасности перед разблокировкой
    • # 2 использовать GCS, чтобы определить причину ошибки предподключения
    • # 3 сообщение об ошибке
          • Отказ RC (то есть отказ передатчика / приемника):
          • (2) Отказ барометра:
          • (3) Отказ компаса:
          • (4) Ошибки, связанные с GPS:
          • (5) Инспекция INS (т.е. ускорение и гироскопическая проверка):
          • (6) Проверка источника питания:
          • (7) Проверка параметров:
  • Третье: анализ кода ошибки перед постановкой на охрану
    • Инициализация обнаружения 1.Pre-Arm
    • Обновление обнаружения 2.Pre-Arm
    • Анализ функции 3.Pre-Arm
        • 1. Проверка разблокировки барометра
        • Проверка дистанционного управления 2.Remote
        • 3. Проверка разблокировки компаса
        • Проверка разблокировки 4.GPS
        • Проверка разблокировки 5.Fence
        • Проверка разблокировки данных навигации 6.Inertia
        • 7. Проверка разблокировки напряжения
        • Проверка блокировки 8.Log
        • Проверка разблокировки 9.Parameter
        • 10.Моторная разблокировка
        • 11. Проверка разблокировки дроссельной заслонки
  • Четвертое: как Pre-Arm отображает наземную станцию ​​и выдает сообщения об ошибках

резюме

В этом разделе в основном анализируется процедура проверки безопасности перед подготовкой для многороторной части ardupilot. Добро пожаловать, чтобы критиковать и исправлять! ! !



Первое: введение в предпродажную подготовку

Ardupilot: Многофункциональное встроенное программное обеспечение ArduCopter имеет очень полный набор напоминаний о проверке безопасности перед подготовкой. Он проверит ваш самолет на наличие большого количества проблем, включая различные ошибки калибровки, а также наличие повреждений датчика. Конечно, механизм проверки разблокировки На 100% надежно, вы можете отключить его с помощью Arming-check в полном списке параметров.


Обратите внимание, что:


Поскольку версия микропрограммы управления полетом постоянно обновляется, некоторые сообщения об ошибках могут изменяться, могут не соответствовать данной статье или не описаны в этой статье, все нормально. Вы можете искать, используя свою собственную поисковую систему



Второе: уведомление об ошибке перед включением



1. Подготовка перед использованием

Используйте наземную станцию ​​GCS (Missionplanner) для просмотра сообщений об ошибках предподключения
вМигающий желтый свет, Пользователи не смогут разблокировать, а при разблокировкеЗуммер также будет звучать дважды, На этом этапе вы должны подключиться к наземной станции, чтобы исключить проблему, которую вы не можете разблокировать и летать.Датчик не откалиброван Или появилсяБеглая защитаНеверная настройка низкого напряженияИ так далее,Следующее подробно проанализирует каждую ошибку:


Причины невозможности разблокировки с помощью анализа информации Pre-Arm:


(1) Приемник дистанционного управления был подключен к плате управления полетом, иСнять винт и аккумулятор(Это очень важно !!! Безопасность прежде всего)
(2) Подключите к наземной станции через USB или цифровую передачу (Mission Planner
(3) Включите пульт дистанционного управления и попытайтесь разблокировать; каналы разблокировки: нижний газ (3 канала), крайний правый рычаг (4 канала) (Это метод разблокировки по умолчанию для apm
(4) В этот момент он должен быть виден в окне наземной станцииОшибка предплечья краснымЕсли подсказка отсутствует, канал разблокировки неправильный. В результате контроллер полета не может обнаружить вашу операцию разблокировки. Вы также можете щелкнуть операцию разблокировки в строке состояния интерфейса данных полета наземной станции.



2. Причины сбоя разблокировки


(1) Часто задаваемые вопросы
这里写图片描述


(2) Часто задаваемые вопросы электронного компаса
这里写图片描述


(3) общие неисправности GPS
这里写图片描述
这里写图片描述
这里写图片描述


(4) Инспекция INS (например, акселерометр и гироскоп)
这里写图片描述
这里写图片描述
这里写图片描述
Приведенные выше ссылки в основном принадлежат Lexun:Лей Сюнь анализ предплечья
Более важная информация — официальный сайт:Официальный сайт Ardupilot Pre-Arm анализ, Лей Сюнь чисто перевод



3. Причина сбоя разблокировки (переведите ее на официальный сайт)



# 1 проверка безопасности перед разблокировкой

(Pre-Arm Safety Check)


Микропрограммное обеспечение беспилотного летательного аппарата включает в себя полный набор процедур проверки разблокировки безопасности, чтобы предотвратить проблемы с безопасностью после того, как беспилотник разблокирован из-за некоторых сбоев, если возникнут какие-либо проблемы до того, как дрон взлетит, в том числе датчик не откалиброван , Условия ошибки, такие как неправильная конфигурация или данные датчика, не позволят дрону взлететь. Эти проверки помогают предотвратить сбой и полет дронов. Но при необходимости, конечно, мы можем отключить настройку проверки безопасности через настройки параметров, но я лично считаю, что она должна быть включена. (Личное понимание смешано в переводе)


# 2 использовать GCS, чтобы определить причину ошибки предподключения

(Recognising which Pre-Arm Check has failed using the GCS)


Пилот должен отметить, что если проверка безопасности не удалась во время разблокировки, пилот не сможет разблокировать дрон, и управление полетом будет сопровождаться мигающим желтым светодиодом. Следовательно, проверка безопасности должна выполняться точно:
1. Подключите данные контроллера полета к наземной станции с помощью USB-кабеля для передачи данных или модуля передачи данных.
2. Убедитесь, что GCS подключен к дрону (т. е. в плоскости полета нажмите кнопку «подключения» в правом верхнем углу).
3. Включите передатчик радиоуправления и попытайтесь разблокировать беспилотник (в обычных процедурах дроссель опускается вниз и поворачивается вправо).
4. Причина неудачной проверки разблокировки будет отображаться красным цветом в окне HUD. Мы можем проанализировать причину ошибки через причину ошибки.


# 3 сообщение об ошибке

(Failure messages)


Отказ RC (то есть отказ передатчика / приемника):

(1)RC not calibrated: Радио калибровка не была выполнена. RC3_MIN и RC3_MAX должны быть изменены со своих значений по умолчанию (1100 и 1900), а для каналов с 1 по 4 значение MIN должно быть 1300 или меньше, а значение MAX должно быть 1700 или выше.



(2) Отказ барометра:

Baro не здоров: BARO вреден для здоровья, а датчик барометра сообщает, что он вреден для здоровья, что обычно является признаком аппаратного сбоя.
Альтернативное расхождение: (разница высот), разница между высотой барометра и высотой инерциальной навигации (т. е. барометр + акселерометр) превышает 2 метра. Это сообщение обычно недолговечное и может появиться, когда контроллер полета впервые подключен или если он получает сильный удар (например, внезапное снижение). Если неясно, акселерометр может потребоваться откалибровать, или может быть аппаратная проблема с барометром.



(3) Отказ компаса:

Compass not healthy :Нездоровый компас: датчик компаса сообщает, что он вреден для здоровья, что является признаком аппаратного сбоя.
Compass not calibrated :Компас не был откалиброван. Параметры COMPASS_OFS_X, Y, Z равны нулю, или число или тип подключенных компасов изменились с момента последней калибровки компаса.
Compass offsets too high :Длина смещения основного компаса (т.е. SqRT (x ^ 2 + y ^ 2 + z ^ 2)) превышает 500. Это может быть вызвано тем, что металлические предметы находятся слишком близко к компасу. Если вы используете только внутренний компас (не рекомендуется), это может быть просто металл в пластине, который вызывает большие смещения, что может и не быть проблемой, и в этом случае вы можете отключить проверку компаса.
Check mag field : Чувствительное магнитное поле в этой области составляет 35% или меньше, чем ожидалось. Ожидаемая длина составляет 530, поэтому> 874 или <185. Напряженность магнитного поля варьируется по всему миру, но эти широкие ограничения означают, что калибровка компаса, скорее всего, не сможет рассчитать хорошее смещение и должна быть повторена.
Compasses inconsistent :Направление компаса противоречиво: внутренний компас и внешний компас указывают в разных направлениях (более 45 градусов). Обычно это вызвано неправильной настройкой внешнего направления компаса (т. Е. География, параметры направления компаса).



(4) Ошибки, связанные с GPS:

GPS Glitch :
Индикатор GPS мигает: индикатор GPS мигает, и дрон находится в режиме полета, в котором требуется режим GPS (т. е. режим ожидания, PosHold и т. д.) и / или включен круговой забор.
Need 3D Fix : У GPS нет трехмерного решения, и дрон находится в режиме GPS и / или режиме полета с включенным круговым забором.
Bad Velocity :Скорость беспилотника (по данным инерциальной навигационной системы) выше 50 см / с. Проблемы, которые могут вызвать это, включают фактическое движение транспортного средства или снижение, плохую калибровку акселерометра и обновления GPS ниже ожидаемых 5 Гц.
Высокая GPS HDOP: ** Значение HDPP (значение точности позиционирования) GPS превышает 2,0, и автомобиль находится в режиме позиционирования GPS и / или в режиме полета с круговым забором. Мы можем просто исправить это, подождав несколько минут, переместившись в место с лучшим обзором неба или проверив, что источник помех GPS (то есть устройство FPV) сместился дальше от GPS. Или вы можете добавить ** GPS_HDOP_GOOD, изменивПараметр равен 2,2 или 2,5, чтобы ослабить проверку. В худшем случае, пилоты могут отключить заборы и взлеты в режимах, которые не требуют GPS (то есть, Стабильный, AltHold) и переключиться на Loiter после разблокировки, но это не рекомендуется. (Это слишком опасно. Перед взлетом обязательно выполните GPS-позиционирование. В настоящее время можно выбрать три режима.)
** Примечание: ** GPS HDOP можно легко просмотреть с помощью быстрой вкладки планировщика миссии, как показано ниже.
这里写图片描述


(5) Инспекция INS (т.е. ускорение и гироскопическая проверка):

** INS не откалиброван: ** INS не откалиброван: смещение некоторых или всех акселерометров равно нулю. Акселерометр необходимо откалибровать.
Accels not healthy: ACCEL вреден для здоровья: отчет по акселерометру вреден для здоровья, что может быть связано с аппаратными проблемами. Это также может произойти сразу после обновления прошивки до перезапуска платы.
Accels inconsistent: Несогласованность ускорения: акселерометр сообщает, что текущее ускорение отличается не менее чем на 1 м / с / с. Акселерометр необходимо откалибровать, иначе возникла аппаратная проблема.
Gyros not healthy: Гироскоп вреден для здоровья: гироскоп сообщает, что он вреден для здоровья, что может быть аппаратной проблемой. Это также может произойти сразу после обновления прошивки до перезапуска платы.
Gyro cal failed: Ошибка калибровки гироскопа: калибровка гироскопа не смогла зафиксировать смещение. Это часто перемещается дронами во время калибровки гироскопа (Когда мигают красные и синие огни) В этом случае отсоедините аккумулятор и вставьте его снова, соблюдая осторожность, чтобы не сдвинуть дрон, что может решить проблему. Отказ оборудования датчика (например, пики) также может быть причиной этого сбоя.
Gyros inconsistent: Гироскопы несовместимы: скорости вращения транспортного средства, сообщаемые двумя гироскопами, отличаются более чем на 20 дг / с. Это может быть вызвано неисправностью оборудования или плохо откалиброванным гироскопом.


(6) Проверка источника питания:

Board Voltage checks:Проверьте напряжение платы источника питания: внутреннее напряжение печатной платы ниже 4,3 вольт или выше 5,8 вольт.
При питании от USB-кабеля (то есть на рабочем месте) это может быть связано с тем, что настольный компьютер не может обеспечить достаточный ток для контроллера полета, попробуйте заменить USB-кабель.
Если он питается от батареи, это серьезная проблема, и перед полетом необходимо тщательно проверить систему питания (например, модуль питания, батарею и т. д.).


(7) Проверка параметров:

Ch7&Ch8 Opt cannot be same:
Параметры Ch7 и Ch8 не могут быть одинаковыми: переключатель доступности установлен на одну и ту же опцию, которая недопустима, поскольку может вызвать путаницу.
Check FS_THR_VALUE: Отказоустойчивое значение ШИМ пульта дистанционного управления установлено слишком близко к минимальному значению канала дроссельной заслонки (например, CH3).
Check ANGLE_MAX:Параметр AGLE_MAX, управляющий максимальным наклоном дрона, устанавливается ниже 10 градусов (т.е. 1000) или выше 80 градусов (т.е. 8000).
** ACRO_BAL_ROLL / PITCH: ** Параметр ACRO_BAL_ROLL выше, чем стабильный бросок P, и / или параметр ACRO_BAL_PITCH выше значения P стабильного шага. Это может привести к тому, что оператор не сможет контролировать угол наклона в режиме ACRO, поскольку стабильность тренажера Acro будет превышать входные данные оператора.


Третье: анализ кода ошибки перед постановкой на охрану


Инициализация обнаружения 1.Pre-Arm


这里写图片描述

void Copter::init_ardupilot()
{
     arming.pre_arm_rc_checks(true);
    if (ap.pre_arm_rc_check) // Выход двигателя можно включить только в том случае, если пульт дистанционного управления проверил его.
    {
        enable_motor_output(); // Включить вывод двигателя
    }
}

(1)arming.pre_arm_rc_checks(true);
Выполняет предварительные проверки, связанные с GPS, и возвращает TRUE, если прошло

void AP_Arming_Copter::pre_arm_rc_checks(const bool display_failure)
{
    // exit immediately if we've already successfully performed the pre-arm rc check
    if (copter.ap.pre_arm_rc_check) {
        return;
    }

    // set rc-checks to success if RC checks are disabled
    if ((checks_to_perform != ARMING_CHECK_ALL) && !(checks_to_perform & ARMING_CHECK_RC)) {
        set_pre_arm_rc_check(true);
        return;
    }

    const RC_Channel *channels[] =
    {
        copter.channel_roll,
        copter.channel_pitch,
        copter.channel_throttle,
        copter.channel_yaw
    };
    const char *channel_names[] = { "Roll", "Pitch", "Throttle", "Yaw" };

    for (uint8_t i=0; i<ARRAY_SIZE(channels);i++)
    {
        const RC_Channel *channel = channels[i];
        const char *channel_name = channel_names[i];
        // check if radio has been calibrated
        if (!channel->min_max_configured()) {
            if (display_failure) {
                copter.gcs_send_text_fmt(MAV_SEVERITY_CRITICAL,"PreArm: RC %s not configured", channel_name);
            }
            return;
        }
        if (channel->get_radio_min() > 1300) {
            if (display_failure) {
                copter.gcs_send_text_fmt(MAV_SEVERITY_CRITICAL,"PreArm: %s radio min too high", channel_name);
            }
            return;
        }
        if (channel->get_radio_max() < 1700) {
            if (display_failure) {
                copter.gcs_send_text_fmt(MAV_SEVERITY_CRITICAL,"PreArm: %s radio max too low", channel_name);
            }
            return;
        }
        if (i == 2) {
            // skip checking trim for throttle as older code did not check it
            continue;
        }
        if (channel->get_radio_trim() < channel->get_radio_min()) {
            if (display_failure) {
                copter.gcs_send_text_fmt(MAV_SEVERITY_CRITICAL,"PreArm: %s radio trim below min", channel_name);
            }
            return;
        }
        if (channel->get_radio_trim() > channel->get_radio_max()) {
            if (display_failure) {
                copter.gcs_send_text_fmt(MAV_SEVERITY_CRITICAL,"PreArm: %s radio trim above max", channel_name);
            }
            return;
        }
    }

    // if we've gotten this far rc is ok
    set_pre_arm_rc_check(true);
}


(2) enable_motor_output (); // Включить выход двигателя. Когда ap.pre_arm_rc_check = 1, включите его, в противном случае — нет.

void Copter::enable_motor_output()
{
    // enable motors
    motors->enable();
    motors->output_min();
}

Обновление обнаружения 2.Pre-Arm


(1) Функция первого шага


 SCHED_TASK(one_hz_loop,            1,    100), // Выполнить проверку разблокировки

(2) функция второго шага


void Copter::one_hz_loop()
{

   arming.update();
}

(3) функция третьего шага


Перед разблокировкой выполните проверку, рабочий цикл равен 1 с, а частота равна 1 Гц.

void AP_Arming_Copter::update(void)
{
    // Выполняем проверку постановки на охрану и отображаем сбои каждые 30 секунд ---- выполняем проверку перед постановкой на охрану и сбои индикации каждые 30 секунд
    static uint8_t pre_arm_display_counter = PREARM_DISPLAY_PERIOD/2; //# define PREARM_DISPLAY_PERIOD 30
    pre_arm_display_counter++;
    bool display_fail = false;
    if (pre_arm_display_counter >= PREARM_DISPLAY_PERIOD) // до 30 с
    {
        display_fail = true;
        pre_arm_display_counter = 0;
    }

    if (pre_arm_checks(display_fail)) // Ключевой анализ
    {
        set_pre_arm_check(true);
    }
}

Функция анализа pre_arm_checks (display_fail)


bool AP_Arming_Copter::pre_arm_checks(bool display_failure)
{
    // Выход немедленно, если рука разблокирована
    if (copter.motors->armed()) 
    {
        return true;
    }

    // check if motor interlock and Emergency Stop aux switches are used
    // at the same time.  This cannot be allowed.
    // Проверьте, используются ли блокировка двигателя и вспомогательный выключатель аварийного останова одновременно. Это не разрешено
    if (copter.check_if_auxsw_mode_used(AUXSW_MOTOR_INTERLOCK) && copter.check_if_auxsw_mode_used(AUXSW_MOTOR_ESTOP)){
        if (display_failure) {
            gcs_send_text(MAV_SEVERITY_CRITICAL,"PreArm: Interlock/E-Stop Conflict");
        }
        return false;
    }

    // Проверьте, используется ли переключатель блокировки двигателя ---- проверьте, используется ли вспомогательный переключатель блокировки двигателя
    // если это так, переключатель должен быть в отключенном положении, чтобы поставить
    // В противном случае выйдите немедленно. Эта проверка повторяется, потому что статус может измениться в любое время. в противном случае немедленно завершите работу. Эта проверка должна быть повторена, так как состояние может измениться в любое время.
    if (copter.ap.using_interlock && copter.ap.motor_interlock_switch) 
    {
        if (display_failure) 
        {
            gcs_send_text(MAV_SEVERITY_CRITICAL,"PreArm: Motor Interlock Enabled");
        }
        return false;
    }

    // Если мы успешно выполнили предварительную проверку, немедленно завершите работу - выйдите немедленно, если мы уже успешно выполнили проверку перед постановкой на охрану
    if (copter.ap.pre_arm_check) 
    {
        // Запускаем проверку GPS, потому что результаты могут измениться и повлиять на цвет светодиода. Дисплею не нужно отказывать, потому что, если пилот попробует ARMARCHECK, он выполнит операцию.
        // run gps checks because results may change and affect LED colour
        // no need to display failures because arm_checks will do that if the pilot tries to arm
        pre_arm_gps_checks(false);
        return true;
    }

    // Возвращаем 1, если проверка разблокировки не включена ----- успешно, если предварительная проверка отключена
    if (checks_to_perform == ARMING_CHECK_NONE) 
    {
        set_pre_arm_check(true);
        set_pre_arm_rc_check(true);
        return true;
    }

 return barometer_checks(display_failure)         // Функция проверки барометра
        & rc_calibration_checks(display_failure)  // Функция обнаружения дистанционного управления
        & compass_checks(display_failure)         // Проверяем компас
        & gps_checks(display_failure)             // проверяем gps
        & fence_checks(display_failure)           // проверить забор
        & ins_checks(display_failure)             // Проверка данных инерциальной навигации
        & board_voltage_checks(display_failure)   // Проверка платы напряжения
        & logging_checks(display_failure)         // проверка журнала
        & parameter_checks(display_failure)       // Проверка параметров
        & motor_checks(display_failure)           // Проверьте мотор
        & pilot_throttle_checks(display_failure); // Проверка дроссельной заслонки
}

Функция анализа set_pre_arm_check (true)


void AP_Arming_Copter::set_pre_arm_check(bool b)
{
    if(copter.ap.pre_arm_check != b) 
    {
        copter.ap.pre_arm_check = b;
        AP_Notify::flags.pre_arm_check = b;
    }
}

Анализ функции 3.Pre-Arm



1. Проверка разблокировки барометра



bool AP_Arming_Copter::barometer_checks(bool display_failure)
{
    // Проверка барометра ------ проверка Баро
    if ((checks_to_perform == ARMING_CHECK_ALL) || (checks_to_perform & ARMING_CHECK_BARO)) 
    {
        // Здоров ли барометр ------ проверка состояния барометра
        if(!barometer.healthy())
        { 
            if (display_failure) 
            {
                gcs_send_text(MAV_SEVERITY_CRITICAL,"PreArm: Barometer not healthy"); // Барометр ненормальный
            }
            return false;
        }
        // Check baro & inav alt are within 1m if EKF is operating in an absolute position mode.
        // Do not check if intending to operate in a ground relative height mode as EKF will output a ground relative height
        // that may differ from the baro height due to baro drift.
        // Если EKF работает в режиме контроля абсолютного положения, проверьте, находится ли разница между BARO и IANV ALT в пределах 1M.
        // Не проверяйте, намереваетесь ли вы работать в режиме относительной высоты над землей, потому что выход EKF может быть на другой земле относительно высоты давления воздуха из-за дрейфа давления воздуха.
        nav_filter_status filt_status = _inav.get_filter_status();
        bool using_baro_ref = (!filt_status.flags.pred_horiz_pos_rel && filt_status.flags.pred_horiz_pos_abs);
        if (using_baro_ref) 
        {
            if (fabsf(_inav.get_altitude() - copter.baro_alt) > PREARM_MAX_ALT_DISPARITY_CM) // Получает ли инерциальная навигация высоту, превышающую высоту барометра на 1 м?
            {
                if (display_failure) 
                {
                    gcs_send_text(MAV_SEVERITY_CRITICAL,"PreArm: Altitude disparity"); // Ошибка слишком большой разницы
                }
                return false; // возвращаем 0, обнаружение ошибки
            }
        }
    }
    return true; // Успех здесь
}


Проверка дистанционного управления 2.Remote



bool AP_Arming_Copter::rc_calibration_checks(bool display_failure)
{
    // Перед разблокировкой pre-arm rc проверяет предварительное условие
    pre_arm_rc_checks(display_failure);
    return copter.ap.pre_arm_rc_check;// Возврат в разблокированное состояние
}

Проанализируйте функцию: pre_arm_rc_checks (display_failure)



void AP_Arming_Copter::pre_arm_rc_checks(const bool display_failure)
{
    // Выйти немедленно, если мы успешно выполнили проверку RC предплечья ------ выйти немедленно, если мы уже успешно выполнили проверку предплечья rc
    if (copter.ap.pre_arm_rc_check) //copter.ap.pre_arm_rc_check=1, проверка прошла успешно
    {
        return;
    }

    // Если проверка RC отключена, установите успешную проверку RC ------------ установите успешную проверку rc, если проверки RC отключены
    if ((checks_to_perform != ARMING_CHECK_ALL) && !(checks_to_perform & ARMING_CHECK_RC)) // ARMING_CHECK_ALL = 0x01, битовый флаг ARMING_CHECK_ALL
    {
        set_pre_arm_rc_check(true);
        return;
    }

    const RC_Channel *channels[] =   // Устанавливаем отображение канала дистанционного управления, обычно устанавливаем roll-1, pitch-2, throttle-3, yaw-4
    {
        copter.channel_roll,
        copter.channel_pitch,
        copter.channel_throttle,
        copter.channel_yaw
    };
    const char *channel_names[] = { "Roll", "Pitch", "Throttle", "Yaw" };// Строковая константа

    for (uint8_t i=0; i<ARRAY_SIZE(channels);i++)    // Рассчитать количество байтов
    {
        const RC_Channel *channel = channels[i];     // Получить канал
        const char *channel_name = channel_names[i]; // Получить имя
        // Проверить, откалиброван ли пульт ДУ ------------------ Проверить, откалибровано ли радио
        if (!channel->min_max_configured()) // Получить канал-> min_max_configured () = 1, уже настроен, не вводить if, иначе вводить if, будет выдана ошибка
        {
            if (display_failure) //display_failure=1
            {
                copter.gcs_send_text_fmt(MAV_SEVERITY_CRITICAL,"PreArm: RC %s not configured", channel_name); // Отправить ошибку на наземную станцию
            }
            return;
        }
        if (channel->get_radio_min() > 1300) // Минимальное значение больше 1300, больше, чем сообщит об ошибке
        {
            if (display_failure) 
            {
                copter.gcs_send_text_fmt(MAV_SEVERITY_CRITICAL,"PreArm: %s radio min too high", channel_name);
            }
            return;
        }
        if (channel->get_radio_max() < 1700) // Если максимальное значение меньше 1700, будет сообщено об ошибке, если оно меньше
        {
            if (display_failure) 
            {
                copter.gcs_send_text_fmt(MAV_SEVERITY_CRITICAL,"PreArm: %s radio max too low", channel_name);
            }
            return;
        }
        if (i == 2) 
        {
            // Когда старый код не проверен, пропустите проверку газа. ---- пропустить проверку триммера газа, так как старый код не проверял
            continue;
        }
        if (channel->get_radio_trim() < channel->get_radio_min()) // Данные дистанционного управления, меньше минимального значения, приглашение слишком низкое
        {
            if (display_failure) 
            {
                copter.gcs_send_text_fmt(MAV_SEVERITY_CRITICAL,"PreArm: %s radio trim below min", channel_name);
            }
            return;
        }
        if (channel->get_radio_trim() > channel->get_radio_max()) // Данные дистанционного управления, больше максимума, приглашение слишком большое
        {
            if (display_failure) 
            {
                copter.gcs_send_text_fmt(MAV_SEVERITY_CRITICAL,"PreArm: %s radio trim above max", channel_name);// Эта функция проанализирована позже
            }
            return;
        }
    }

    // Если код выполняется здесь, можно использовать RC. То есть, проверка качества пройдена, будьте уверены в использовании ------ если мы дошли до этого, то все в порядке
    set_pre_arm_rc_check(true);// Ключ должен быть установлен: copter.ap.pre_arm_rc_check = 1
}

Проанализируйте функцию: copter.gcs_send_text_fmt

При отправке отформатированных сообщений с низким приоритетом в GCS подходит только одно сообщение в очереди, поэтому, если несколько сообщений отправлено до того, как последнее поступит в последовательный буфер, старые сообщения будут потеряны. Эта функция находится в GCS_Mavlink.cpp. Эта функция сейчас не анализируется. Достаточно знать, что она отправляет ошибки на наземную станцию ​​через mavlink. Она продолжит анализировать эту функцию, когда у нее будет время.


void Copter::gcs_send_text_fmt(MAV_SEVERITY severity, const char *fmt, ...)
{
    char str[MAVLINK_MSG_STATUSTEXT_FIELD_TEXT_LEN] {};
    va_list arg_list;
    va_start(arg_list, fmt);
    va_end(arg_list);
    hal.util->vsnprintf((char *)str, sizeof(str), fmt, arg_list);
    gcs().send_statustext(severity, 0xFF, str);
    notify.send_text(str);// Уведомить об отправке информации
}


3. Проверка разблокировки компаса



bool AP_Arming_Copter::compass_checks(bool display_failure)
{
    bool ret = AP_Arming::compass_checks(display_failure);// Проверка компаса для разблокировки

    if ((checks_to_perform == ARMING_CHECK_ALL) || (checks_to_perform & ARMING_CHECK_COMPASS)) 
    {
        // check compass offsets have been set.  AP_Arming only checks
        // this if learning is off; Copter *always* checks.
        // Убедитесь, что смещение компаса установлено. Только когда обучение закончено, проверка разблокировки только проверяет это, COPTER всегда проверяет.
        if (!_compass.configured()) 
        {
            if (display_failure) 
            {
                gcs_send_text(MAV_SEVERITY_CRITICAL,"PreArm: Compass not calibrated"); // Отправить без калибровки
            }
            ret = false;
        }
    }

    return ret;
}

Функция анализа AP_Arming :: compass_checks (display_failure)


bool AP_Arming::compass_checks(bool report)
{
    if ((checks_to_perform) & ARMING_CHECK_ALL ||(checks_to_perform) & ARMING_CHECK_COMPASS) // начинать ли проверку компаса
    {

        if (!_compass.use_for_yaw())  // Если компас использует вычисление рыскания, возвращаем 1
        {
            // Если вы введете здесь, компас не включен ----- использование компаса отключено
            return true;
        }

        if (!_compass.healthy()) // Компас здоров? _Compass.healthy () = 1, он здоров, в противном случае он вреден для здоровья, он подскажет на наземной станции
        {
            if (report) 
            {
                GCS_MAVLINK::send_statustext_all(MAV_SEVERITY_CRITICAL, "PreArm: Compass not healthy");// Ошибка подсказки
            }
            return false;
        }
        // Проверяем, что компас обучается или смещение установлено -------- проверяем, что компас включен или смещения установлены
        if (!_compass.learn_offsets_enabled() && !_compass.configured()) 
        {
            if (report) 
            {
                GCS_MAVLINK::send_statustext_all(MAV_SEVERITY_CRITICAL, "PreArm: Compass not calibrated");
            }
            return false;
        }

        // проверка калибровки компаса ------ проверка калибровки компаса
        if (_compass.is_calibrating()) 
        {
            if (report) 
            {
                GCS_MAVLINK::send_statustext_all(MAV_SEVERITY_CRITICAL, "Arm: Compass calibration running");
            }
            return false;
        }

        // Сообщаем, что компас проверки наземной станции откалиброван и его необходимо сбросить -------- проверить, откалиброван ли компас и требуется ли перезагрузка
        if (_compass.compass_cal_requires_reboot()) 
        {
            if (report) 
            {
                GCS_MAVLINK::send_statustext_all(MAV_SEVERITY_CRITICAL, "PreArm: Compass calibrated requires reboot");
            }
            return false;
        }

        // проверка на необоснованные смещения компаса ------ проверка на необоснованные смещения компаса
        Vector3f offsets = _compass.get_offsets();
        if (offsets.length() > _compass.get_offsets_max()) 
        {
            if (report) 
            {
                GCS_MAVLINK::send_statustext_all(MAV_SEVERITY_CRITICAL, "PreArm: Compass offsets too high");
            }
            return false;
        }

        // проверка на необоснованную длину поля MAG ------ проверка на необоснованную длину магнитного поля
        float mag_field = _compass.get_field().length();
        if (mag_field > AP_ARMING_COMPASS_MAGFIELD_MAX || mag_field < AP_ARMING_COMPASS_MAGFIELD_MIN) 
        {
            if (report) 
            {
                GCS_MAVLINK::send_statustext_all(MAV_SEVERITY_CRITICAL, "PreArm: Check mag field");
            }
            return false;
        }

        // Проверяем все точки компаса примерно в одном направлении
        if (!_compass.consistent()) 
        {
            if (report) 
            {
                GCS_MAVLINK::send_statustext_all(MAV_SEVERITY_CRITICAL,"PreArm: Compasses inconsistent");
            }
            return false;
        }
    }

    return true;
}


Проверка разблокировки 4.GPS



bool AP_Arming_Copter::gps_checks(bool display_failure)
{
    // Проверка GPS ----- проверка GPS
    if (!pre_arm_gps_checks(display_failure)) 
    {
        return false;
    }
    return true;
}

Функция анализа pre_arm_gps_checks (display_failure)


bool AP_Arming_Copter::pre_arm_gps_checks(bool display_failure)
{
    //Всегда проверяйте, началась ли инерциальная навигация, и читайте данные ------ всегда проверяйте if inertial nav has started and is ready
    if (!ahrs.healthy()) //Данные не здоровы
    {
        if (display_failure) 
        {
            gcs_send_text(MAV_SEVERITY_CRITICAL,"PreArm: Waiting for Nav Checks"); //Ожидание инерционной проверки навигации
        }
        return false;
    }

    //Проверьте, требует ли режим полета GPS ----- if flight mode requires GPS
    bool mode_requires_gps = copter.mode_requires_GPS(copter.control_mode);

    //Проверьте, требует ли забор GPS ------- проверка if fence requires GPS
    bool fence_requires_gps = false;
    #if AC_FENCE == ENABLED
    //Если круговые или полигональные заборы включены, нам нужен GPS. ---- if circular or polygon fence is enabled we need GPS
    fence_requires_gps = (copter.fence.get_enabled_fences() & (AC_FENCE_TYPE_CIRCLE | AC_FENCE_TYPE_POLYGON)) > 0;
    #endif

    //Если вам не нужен GPS, верните true ----- return true if GPS is not required
    if (!mode_requires_gps && !fence_requires_gps) 
    {
        AP_Notify::flags.pre_arm_gps_check = true;
        return true;
    }

    //Убедитесь, что GPS хорошо ------- убедитесь, GPS is ok
    if (!copter.position_ok()) 
    {
        if (display_failure) 
        {
            const char *reason = ahrs.prearm_failure_reason();
            if (reason) 
            {
                GCS_MAVLINK::send_statustext_all(MAV_SEVERITY_CRITICAL, "PreArm: %s", reason);
            } else 
            {
                if (!mode_requires_gps && fence_requires_gps) 
                {
                    //Уточните пользователю, зачем ему GPS в режиме полета без GPS in non-GPS flight mode
                    gcs_send_text(MAV_SEVERITY_CRITICAL,"PreArm: Fence enabled, need 3D Fix");
                } else 
                {
                    gcs_send_text(MAV_SEVERITY_CRITICAL,"PreArm: Need 3D Fix");
                }
            }
        }
        AP_Notify::flags.pre_arm_gps_check = false;
        return false;
    }

    //Проверить на сбой GPS (например, отчет EKF) ----- проверить for GPS glitch (as reported by EKF)
    nav_filter_status filt_status;
    if (_ahrs_navekf.get_filter_status(filt_status)) 
    {
        if (filt_status.flags.gps_glitching) {
            if (display_failure) 
            {
                gcs_send_text(MAV_SEVERITY_CRITICAL,"PreArm: GPS glitching");
            }
            return false;
        }
    }

    //Убедитесь, что дисперсия компаса EKF ниже порогового значения безопасности ------ проверьте дисперсию компаса EKF is below failsafe threshold
    float vel_variance, pos_variance, hgt_variance, tas_variance;
    Vector3f mag_variance;
    Vector2f offset;
    _ahrs_navekf.get_variances(vel_variance, pos_variance, hgt_variance, mag_variance, tas_variance, offset);
    if (mag_variance.length() >= copter.g.fs_ekf_thresh) 
    {
        if (display_failure) 
        {
            gcs_send_text(MAV_SEVERITY_CRITICAL,"PreArm: EKF compass variance");
        }
        return false;
    }

    //Проверьте дом и очки EKF не слишком далеко ----- проверьте дом and EKF origin are not too far
    if (copter.far_from_EKF_origin(ahrs.get_home())) 
    {
        if (display_failure) 
        {
            gcs_send_text(MAV_SEVERITY_CRITICAL,"PreArm: EKF-home variance");
        }
        AP_Notify::flags.pre_arm_gps_check = false;
        return false;
    }

    //Если проверка GPS отключена, немедленно вернитесьtrue----- return true immediately if gps check is disabled
    if (!(checks_to_perform == ARMING_CHECK_ALL || checks_to_perform & ARMING_CHECK_GPS)) 
    {
        AP_Notify::flags.pre_arm_gps_check = true;
        return true;
    }

    //Предупреждение о разделении hdop --- для предотвращения путаницы пользователей без блокировки gps --- предупреждает о hdop отдельно - для предотвращения путаницы пользователей with no gps lock
    if (copter.gps.get_hdop() > copter.g.gps_hdop_good) 
    {
        if (display_failure) 
        {
            gcs_send_text(MAV_SEVERITY_CRITICAL,"PreArm: High GPS HDOP"); //gкоэффициент точности ps
        }
        AP_Notify::flags.pre_arm_gps_check = false;
        return false;
    }

    //Вызов родительского чека gps
    if (!AP_Arming::gps_checks(display_failure)) 
    {
        return false;
    }

    //Если мы придем сюда, все готово ----- if we got here all must be ok
    AP_Notify::flags.pre_arm_gps_check = true;
    return true;
}


Проверка разблокировки 5.Fence



bool AP_Arming_Copter::fence_checks(bool display_failure)
{
    #if AC_FENCE == ENABLED
    // Проверяем, включен ли забор ------- проверка забора инициализирована
    const char *fail_msg = nullptr;
    if (!copter.fence.pre_arm_check(fail_msg)) 
    {
        if (display_failure && fail_msg != nullptr) 
        {
            GCS_MAVLINK::send_statustext_all(MAV_SEVERITY_CRITICAL, "PreArm: %s", fail_msg);
        }
        return false;
    }
    #endif
    return true;
}

Функция анализа copter.fence.pre_arm_check (fail_msg)


bool AC_Fence::pre_arm_check(const char* &fail_msg) const
{
    fail_msg = nullptr;

    //Если вы не включите или не установите забор, всегда возвращается true ------ if not enabled or not fence set-up always return true
    if (!_enabled || _enabled_fences == AC_FENCE_TYPE_NONE) 
    {
        return true;
    }

    // Проверить нет ограничений в настоящее время нарушено-проверить no limits are currently breached
    if (_breached_fences != AC_FENCE_TYPE_NONE) 
    {
        fail_msg =  "vehicle outside fence";
        return false;
    }

    //Если горизонтальный предел включен, проверьте, что положение блока инерциальной навигации является нормальным. ---- if we have horizontal limits enabled, check inertial nav position is ok
    if ((_enabled_fences & (AC_FENCE_TYPE_CIRCLE | AC_FENCE_TYPE_POLYGON))>0 && 
            !_inav.get_filter_status().flags.horiz_pos_abs && !_inav.get_filter_status().flags.pred_horiz_pos_abs) 
    {
        fail_msg = "fence requires position";
        return false;
    }

    //Здесь все хорошо --------if we got this far everything must be ok
    return true;
}


Проверка разблокировки данных навигации 6.Inertia



bool AP_Arming_Copter::ins_checks(bool display_failure)
{
    bool ret = AP_Arming::ins_checks(display_failure);// Проверка данных инерциальной навигации

    if ((checks_to_perform == ARMING_CHECK_ALL) || (checks_to_perform & ARMING_CHECK_INS)) // Включить флаг
    {
        // Получить отношение к EKF (если оно плохое, обычно это смещение гироскопа) ----- получить отношение к EKF (если оно плохое, обычно это смещение гироскопа)
        if (!pre_arm_ekf_attitude_check())  // Выполнить проверку осанки
        {
            if (display_failure) 
            {
                gcs_send_text(MAV_SEVERITY_CRITICAL,"PreArm: gyros still settling");
            }
            ret = false;
        }
    }

    return ret;
}

Функция анализа AP_Arming :: ins_checks (display_failure)


bool AP_Arming::ins_checks(bool report)
{
    if ((checks_to_perform & ARMING_CHECK_ALL) ||
        (checks_to_perform & ARMING_CHECK_INS)) 
    {
        const AP_InertialSensor &ins = ahrs.get_ins();
        if (!ins.get_gyro_health_all()) // Гироскоп вреден для здоровья
        {
            if (report) 
            {
                GCS_MAVLINK::send_statustext_all(MAV_SEVERITY_CRITICAL, "PreArm: Gyros not healthy");
            }
            return false;
        }
        if (!ins.gyro_calibrated_ok_all()) // Гироскоп не откалиброван
        {
            if (report) 
            {
                GCS_MAVLINK::send_statustext_all(MAV_SEVERITY_CRITICAL, "PreArm: Gyros not calibrated");
            }
            return false;
        }
        if (!ins.get_accel_health_all()) // Ускоренное ускорение
        {
            if (report) 
            {
                GCS_MAVLINK::send_statustext_all(MAV_SEVERITY_CRITICAL, "PreArm: Accels not healthy");
            }
            return false;
        }
        if (!ins.accel_calibrated_ok_all()) // Ускорение требует 3D калибровки
        {
            if (report) 
            {
                GCS_MAVLINK::send_statustext_all(MAV_SEVERITY_CRITICAL, "PreArm: 3D Accel calibration needed");
            }
            return false;
        }

        // Проверьте, откалиброван ли акселерометр и требуется ли его перезапуск ------- Проверьте, откалиброваны ли акселерометры и требуется ли перезагрузка
        if (ins.accel_cal_requires_reboot()) 
        {
            if (report) 
            {
                GCS_MAVLINK::send_statustext_all(MAV_SEVERITY_CRITICAL, "PreArm: Accels calibrated requires reboot");
            }
            return false;
        }

        // Проверяем все точки акселерометра примерно в одном направлении
        if (ins.get_accel_count() > 1) 
        {
            const Vector3f &prime_accel_vec = ins.get_accel();
            for(uint8_t i=0; i<ins.get_accel_count(); i++) 
            {
                if (!ins.use_accel(i)) 
                {
                    continue;
                }
                // Получить следующий вектор ACCEL-получить следующий вектор ускорения
                const Vector3f &accel_vec = ins.get_accel(i);
                Vector3f vec_diff = accel_vec - prime_accel_vec;
                // Разрешить определяемые пользователем различия, обычно 0,75 м / с / с, которые должны пройти в течение последних 10 секунд. --- допускает определяемую пользователем разницу, обычно 0,75 м / с / с. Должен пройти за последние 10 секунд
                float threshold = accel_error_threshold;
                if (i >= 2) 
                {
                    /*
                      we allow for a higher threshold for IMU3 as it
                      runs at a different temperature to IMU1/IMU2,
                      and is not used for accel data in the EKF
                     */
                    // Мы допускаем более высокий порог IMU3, потому что он работает на IMU1 / IMU2 при разных температурах и не используется для данных ACCEL в EKF.
                    threshold *= 3;
                }

                // EKF не чувствителен к ошибке оси Z ---- EKF менее чувствителен к ошибке оси Z
                vec_diff.z *= 0.5f;

                if (vec_diff.length() <= threshold) 
                {
                    last_accel_pass_ms[i] = AP_HAL::millis();
                }
                if (AP_HAL::millis() - last_accel_pass_ms[i] > 10000) 
                {
                    if (report) 
                    {
                        GCS_MAVLINK::send_statustext_all(MAV_SEVERITY_CRITICAL, "PreArm: Accels inconsistent");
                    }
                    return false;
                }
            }
        }

        // Проверяем, все ли гироскопы дают одинаковые показания ---- проверяем, что все гироскопы дают одинаковые показания
        if (ins.get_gyro_count() > 1) 
        {
            const Vector3f &prime_gyro_vec = ins.get_gyro();
            for(uint8_t i=0; i<ins.get_gyro_count(); i++) 
            {
                if (!ins.use_gyro(i)) 
                {
                    continue;
                }
                // get next gyro vector
                const Vector3f &gyro_vec = ins.get_gyro(i);
                Vector3f vec_diff = gyro_vec - prime_gyro_vec;
                // allow for up to 5 degrees/s difference. Pass if it has
                // been OK in last 10 seconds
                if (vec_diff.length() <= radians(5)) 
                {
                    last_gyro_pass_ms[i] = AP_HAL::millis();
                }
                if (AP_HAL::millis() - last_gyro_pass_ms[i] > 10000) 
                {
                    if (report) 
                    {
                        GCS_MAVLINK::send_statustext_all(MAV_SEVERITY_CRITICAL, "PreArm: Gyros inconsistent");
                    }
                    return false;
                }
            }
        }
    }

    return true;
}

Функция анализа pre_arm_ekf_attitude_check ()


bool AP_Arming_Copter::pre_arm_ekf_attitude_check()
{
    // Получить статус фильтра EKF ---- получить статус фильтра EKF
    nav_filter_status filt_status = _inav.get_filter_status();

    return filt_status.flags.attitude;
}


7. Проверка разблокировки напряжения



bool AP_Arming_Copter::board_voltage_checks(bool display_failure)
{
#if HAL_HAVE_BOARD_VOLTAGE
    // Проверить напряжение ------ проверить напряжение на плате
    if ((checks_to_perform == ARMING_CHECK_ALL) || (checks_to_perform & ARMING_CHECK_VOLTAGE)) 
    {
        if (hal.analogin->board_voltage() < BOARD_VOLTAGE_MIN || hal.analogin->board_voltage() > BOARD_VOLTAGE_MAX) 
        {
            if (display_failure) 
            {
                gcs_send_text(MAV_SEVERITY_CRITICAL,"PreArm: Check Board Voltage");
            }
            return false;
        }
    }
#endif

    Parameters &g = copter.g;

    // Проверить напряжение аккумулятора ---- проверить напряжение аккумулятора
    if ((checks_to_perform == ARMING_CHECK_ALL) || (checks_to_perform & ARMING_CHECK_VOLTAGE)) 
    {
        if (copter.failsafe.battery) 
        {
            if (display_failure) 
            {
                gcs_send_text(MAV_SEVERITY_CRITICAL,"PreArm: Battery failsafe");
            }
            return false;
        }

        // Если подключен USB, все следующие проверки пропускаются, если подключен USB
        if (copter.ap.usb_connected) 
        {
            return true;
        }

        // проверить, не разряжена ли батарея --- проверить, не разряжена ли батарея
        if (copter.battery.exhausted(g.fs_batt_voltage, g.fs_batt_mah)) 
        {
            if (display_failure) 
            {
                gcs_send_text(MAV_SEVERITY_CRITICAL,"PreArm: Check Battery");
            }
            return false;
        }

        // Вызов родительских проверок батареи ---- вызов родительских проверок батареи
        if (!AP_Arming::battery_checks(display_failure)) 
        {
            return false;
        }
    }

    return true;
}


Проверка блокировки 8.Log



bool AP_Arming::logging_checks(bool report)
{
    if ((checks_to_perform & ARMING_CHECK_ALL) ||(checks_to_perform & ARMING_CHECK_LOGGING)) 
    {
        if (DataFlash_Class::instance()->logging_failed()) 
        {
            if (report) 
            {
                GCS_MAVLINK::send_statustext_all(MAV_SEVERITY_CRITICAL, "PreArm: Logging failed");
            }
            return false;
        }
        if (!DataFlash_Class::instance()->CardInserted()) 
        {
            if (report) 
            {
                GCS_MAVLINK::send_statustext_all(MAV_SEVERITY_CRITICAL, "PreArm: No SD card");
            }
            return false;
        }
    }
    return true;
}


Проверка разблокировки 9.Parameter




bool AP_Arming_Copter::parameter_checks(bool display_failure)
{
    // Проверка различных значений параметров ------ проверка различных значений параметров
    if ((checks_to_perform == ARMING_CHECK_ALL) || (checks_to_perform & ARMING_CHECK_PARAMETERS)) 
    {

        // Убедитесь, что CH7 и CH8 имеют разные функции ------- Убедитесь, что CH7 и CH8 имеют разные функции
        if (copter.check_duplicate_auxsw()) 
        {
            if (display_failure) 
            {
                gcs_send_text(MAV_SEVERITY_CRITICAL,"PreArm: Duplicate Aux Switch Options");
            }
            return false;
        }

        // Отказоустойчивые проверки параметров ----- отказоустойчивые проверки параметров
        if (copter.g.failsafe_throttle) 
        {
            // check throttle min is above throttle failsafe trigger and that the trigger is above ppm encoder's loss-of-signal value of 900
            // Проверяем, что минимальное значение дроссельной заслонки выше, чем значение триггера безотказной работы дроссельной заслонки, и триггер выше, чем значение потери сигнала датчика PPM на 900.
            if (copter.channel_throttle->get_radio_min() <= copter.g.failsafe_throttle_value+10 || copter.g.failsafe_throttle_value < 910) 
            {
                if (display_failure) 
                {
                    gcs_send_text(MAV_SEVERITY_CRITICAL,"PreArm: Check FS_THR_VALUE");
                }
                return false;
            }
        }

        // проверка параметра угла наклона ------- проверка параметра угла наклона
        if (copter.aparm.angle_max < 1000 || copter.aparm.angle_max > 8000) 
        {
            if (display_failure) 
            {
                gcs_send_text(MAV_SEVERITY_CRITICAL,"PreArm: Check ANGLE_MAX");
            }
            return false;
        }

        // проверка параметров динамического баланса ----- проверка параметров баланса acro
        if ((copter.g.acro_balance_roll > copter.attitude_control->get_angle_roll_p().kP()) || (copter.g.acro_balance_pitch > copter.attitude_control->get_angle_pitch_p().kP())) {
            if (display_failure) 
            {
                gcs_send_text(MAV_SEVERITY_CRITICAL,"PreArm: ACRO_BAL_ROLL/PITCH");
            }
            return false;
        }

        #if RANGEFINDER_ENABLED == ENABLED && OPTFLOW == ENABLED
        // Проверка дальномера, если оптический поток включен -------- проверка дальномера, если включен optflow
        if (copter.optflow.enabled() && !copter.rangefinder.pre_arm_check()) 
        {
            if (display_failure) 
            {
                gcs_send_text(MAV_SEVERITY_CRITICAL,"PreArm: check range finder");
            }
            return false;
        }
        #endif

        #if FRAME_CONFIG == HELI_FRAME
        // Проверка параметров вертолета ----- проверка параметров вертолета
        if (!copter.motors->parameter_check(display_failure)) 
        {
            return false;
        }
        #endif // HELI_FRAME

        // Проверка на отсутствие данных о местности ---- проверка на отсутствие данных о местности
        if (!pre_arm_terrain_check(display_failure)) 
        {
            return false;
        }

        // Проверка ADSB, чтобы избежать отказоустойчивости ---- проверка adsb предотвращение отказоустойчивости
        if (copter.failsafe.adsb) 
        {
            if (display_failure) 
            {
                gcs_send_text(MAV_SEVERITY_CRITICAL,"PreArm: ADSB threat detected");
            }
            return false;
        }

        // Проверка датчика приближения ----- проверка на близость к автомобилю
        if (!pre_arm_proximity_check(display_failure)) 
        {
            return false;
        }
    }
    return true;
}


10.Моторная разблокировка



bool AP_Arming_Copter::motor_checks(bool display_failure)
{
    // Проверка правильности инициализации двигателя ------------- Проверка правильности инициализации двигателя
    if (!copter.motors->initialised_ok()) 
    {
        if (display_failure) 
        {
            gcs_send_text(MAV_SEVERITY_CRITICAL,"PreArm: check firmware or FRAME_CLASS");
        }
        return false;
    }
    return true;
}


11. Проверка разблокировки дроссельной заслонки



bool AP_Arming_Copter::pilot_throttle_checks(bool display_failure)
{
    // check throttle is above failsafe throttle
    // this is near the bottom to allow other failures to be displayed before checking pilot throttle
    // Проверяем, превышает ли значение дроссельной заслонки значение неисправной дроссельной заслонки, когда оно близко к наименьшему значению дроссельной заслонки, чтобы разрешить отображение других неисправностей до проверки дроссельной заслонки
    if ((checks_to_perform == ARMING_CHECK_ALL) || (checks_to_perform & ARMING_CHECK_RC)) 
    {
        if (copter.g.failsafe_throttle != FS_THR_DISABLED && copter.channel_throttle->get_radio_in() < copter.g.failsafe_throttle_value) 
        {
            if (display_failure) 
            {
                #if FRAME_CONFIG == HELI_FRAME
                gcs_send_text(MAV_SEVERITY_CRITICAL,"PreArm: Collective below Failsafe");
                #else
                gcs_send_text(MAV_SEVERITY_CRITICAL,"PreArm: Throttle below Failsafe");
                #endif
            }
            return false;
        }
    }

    return true;
}


Четвертое: как Pre-Arm отображает наземную станцию ​​и выдает сообщения об ошибках



1.gcs_send_text () функция


void AP_Arming_Copter::gcs_send_text(MAV_SEVERITY severity, const char *str)
{
    copter.gcs_send_text(severity, str);
}
void Copter::gcs_send_text(MAV_SEVERITY severity, const char *str)
{
    gcs().send_statustext(severity, 0xFF, str);
    notify.send_text(str);
}

1) gcs().send_statustext(severity, 0xFF, str)


void GCS::send_statustext(MAV_SEVERITY severity, uint8_t dest_bitmask, const char *text)
{
    if (dataflash_p != nullptr) 
    {
        dataflash_p->Log_Write_Message(text);
    }

    // add statustext message to FrSky lib queue
    if (frsky_telemetry_p != NULL) 
    {
        frsky_telemetry_p->queue_message(severity, text);
    }

    // filter destination ports to only allow active ports.
    statustext_t statustext{};
    statustext.bitmask = (GCS_MAVLINK::active_channel_mask()  | GCS_MAVLINK::streaming_channel_mask() ) & dest_bitmask;
    if (!statustext.bitmask) {
        // nowhere to send
        return;
    }

    statustext.msg.severity = severity;
    strncpy(statustext.msg.text, text, sizeof(statustext.msg.text));

    // The force push will ensure comm links do not block other comm links forever if they fail.
    // If we push to a full buffer then we overwrite the oldest entry, effectively removing the
    // block but not until the buffer fills up.
    _statustext_queue.push_force(statustext);

    // try and send immediately if possible
    service_statustext();
}

2) notify.send_text(str)


void AP_Notify::send_text(const char *str)
{
    strncpy(_send_text, str, sizeof(_send_text));
    _send_text[sizeof(_send_text)-1] = 0;
    _send_text_updated_millis = AP_HAL::millis();
}

2.copter.gcs_send_text_fmt функция


void Copter::gcs_send_text_fmt(MAV_SEVERITY severity, const char *fmt, ...)
{
    char str[MAVLINK_MSG_STATUSTEXT_FIELD_TEXT_LEN] {};
    va_list arg_list;
    va_start(arg_list, fmt);
    va_end(arg_list);
    hal.util->vsnprintf((char *)str, sizeof(str), fmt, arg_list);
    gcs().send_statustext(severity, 0xFF, str);
    notify.send_text(str);
}

3.send_statustext_all () функция


void GCS_MAVLINK::send_statustext_all(MAV_SEVERITY severity, const char *fmt, ...)
{
    char text[MAVLINK_MSG_STATUSTEXT_FIELD_TEXT_LEN+1] {};
    va_list arg_list;
    va_start(arg_list, fmt);
    hal.util->vsnprintf((char *)text, sizeof(text)-1, fmt, arg_list);
    va_end(arg_list);
    text[MAVLINK_MSG_STATUSTEXT_FIELD_TEXT_LEN] = 0;
    gcs().send_statustext(severity, mavlink_active | chan_is_streaming, text);
}


While working on a new APM 2.6 build I came across this issue whereby the APM will not arm because of a reported GPS HDOP of greater than 2.  Occasionally, re-powering the multi-rotor will see the HDOP below 2 and so arming is possible. However, that has not been consistent.

Tonight I have been researching this High GPS HDOP issue that we have been seeing.  And I think that I have some answers now …

Trigger
The PreArm error message only triggers when attempting to arm the APM when a GPS-dependent function is enabled. That would be Loiter, Pos Hold, Auto (mission) or Geofence (I had Geofence enabled). 

In my case, disabling Geofence and setting flight mode to Stabilize sees the FC arm as normal and consistently with a reported HDOP of greater than 2 (but less than 3).

Mitigation

In Mission Planner, Config/Tuning, Full Parameter List, search for GPS_HDOP_GOOD and change it to 300 (from its default 200).  This not such a bad thing to do. See below for why.

Seeing as I want to use Geofence, which when enabled will require GPS before arming, I have set my FC’;s parameter to 300 (3).

Root Cause

A longstanding bug exists in the Arducopter code that has been there for a couple of years and not fixed. It is where the Arducopter code is reading the PDOP value from the GPS and misrepresenting it as HDOP. Of course, there can be very many good reasons why PDOP might be higher. 

There is a fairly good explanation of it in a blog post here: https://www.cloud-surfer.net/2014/09/12/high-hdop-values-when-flying-iris/

If this is true then we will have to wait for the bug to be fixed, but the mitigation of setting the value to 300 (3) is benign. 

  • 6 people like this.


Danny
«Its better than bad, its good»

Current FCs: Pixhawk, APM 2.6, Naza M V2, Naze32, Flip32+ CC3D, KK2.1.5
Aircraft: miniMax Hex, DJI 550 (clone) TBS Disco, 450 Firefly, 250 Pro, ZMR250, Hubsan X4, Bixler 2


I have been getting the alert: Prearm High GPS HDOP when trying to arm my Pixhawk. I have it in AltHold mode when trying to arm. If its in stabilize mode of course I dont get the error. The GPS is on a 5″ GPS
holder.
http://imgur.com/YYR2JrN

Any help would be appreciated.

Sign up now

to remove ads between posts

Oldgazer's Avatar

Arming in a GPS mode is never a good idea. Arm in Stabilize, get into the air and then switch to a GPS mode.

FWIW, I use telemetry radios. I have a ground radio connected to my phone, and the phone sits in a holder attached to my transmitter.

I use Tower, and it tells me what the aircraft status is, and it gives me warnings and alerts. One thing that I really like is that when I arm the motors, Tower says «Armed», and «Way Points Received.» This let’s me know I can safely switch to any GPS mode after the aircraft is in the air.

I always arm in loiter mode and take off in stabilize. It’s the only way to ensure hdop is low enough to safely hold position or return to home. If you’re not using an M8N with a Pixhawk then that’s almost certainly the problem.

http://www.readytoflyquads.com/mini-…ne-and-compass

I have this GPS mounted inside my frame (basswood with decal covering) and getting 1.6 hdop.


  • Name: 20150805_175612.jpg
Views: 77
Size: 772.7 KB
Description:

    Views: 77

Last edited by patricklupo; Nov 01, 2015 at 03:00 PM.

Oldgazer's Avatar

I wait until Tower tells me I have a 3D GPS lock. Then when I arm, Tower tells me «Way Points Received,» and I take off. Never had a problem.

I will say «Roger That» to the M8N. I had a 6M, and it was hit or miss. What is really funny is I have a quad with an APM and a LEA-6H that works a lot better than the 6M ever did…

1320fastback's Avatar

Changed yesterday to a M8N, best mod ever!

Ublox M9N Test (2 min 20 sec)

Thank you for the help. I will try this today

What does High GPS HDOP mean? I’ll get High GPS HDOP when trying to arm the quad but when i unplug the battery a few times the message goes alway then i can arm the quad. Is it because im not getting a good GPS lock? «Newbie»


Loading …

DIY Robocars via Twitter

RT @chr1sa: Donkeycar 4.4 released with tons of new features, including path learning (useful with GPS outdoors), better Web and Lidar supp…

DIY Robocars via Twitter

RT @NXP: We are already biting our nails in anticipation of the #NXPCupEMEA challenge! 😉 Did you know there are great cash prizes to be won…

DIY Robocars via Twitter

RT @gclue_akira: レースまであと3日。今回のコースは激ムズかも。あと一歩

#jetracer https://t.co/GKcEjImQ3t

DIY Robocars via Twitter

RT @chr1sa: The next @DIYRobocars autonomous car race at @circuitlaunch will be on Sat, Dec 10.

Thrills, spills and a Brazilian BBQ. Fun…

DIY Robocars via Twitter

RT @arthiak_tc: Donkey car platform … Still training uses behavioral cloning #TCXpo #diyrobocar @OttawaAVGroup https://t.co/PHBYwlFlnE

DIY Robocars via Twitter

RT @emurmur77: Points for style. @donkeycar racing in @diyrobocars at @UCSDJacobs thanks @chr1sa for taking the video. https://t.co/Y2hMyj1…

DIY Robocars via Twitter

RT @SmallpixelCar: Going to @diyrobocars race at @UCSDJacobs https://t.co/Rrf9vDJ8TJ

DIY Robocars via Twitter

RT @SmallpixelCar: Race @diyrobocars at @UCSDJacobs thanks @chr1sa for taking the video. https://t.co/kK686Hb9Ej

DIY Robocars via Twitter

RT @PiWarsRobotics: Presenting: the Hacky Racers Robotic Racing Series in collaboration with #PiWars. Find out more and register your inter…

DIY Robocars via Twitter

RT @Hacky_Racers: There will be three classes at this event: A4, A2, and Hacky Racer! A4 and A2 are based around UK paper sizing and existi…

DIY Robocars via Twitter

RT @NeaveEng: Calling all UK based folks interested in @diyrobocars, @f1tenth, @donkey_car, and similar robot racing competitions! @hacky_r…

DIY Robocars via Twitter

RT @araffin2: 🏎️
After hours of video editing, I’m happy to share a best of my Twitch videos on learning to race with RL.
🏎️
Each part is…

More…


Loading …

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Hid dll ошибка rust
  • Hid compliant headset ошибка