Я прошу прощения за сообщения здесь, поскольку у меня нет 50 репутации, чтобы комментировать.
Ваша конфигурация:
Контроллер полета: PixHawk 2.1
Компаньон Компьютер: Raspberry Pi
Компьютер-компаньон ОС: Ubuntu?
Companion Computer Drone API: dronekit
Чего не хватает для лучшего анализа:
Автопилот состоит из контроллера полета и кода.
В вашем случае это Ardupilot или PX4?
В случае Ardupilot, я мог бы ответить, где вы можете споткнуться.
(PX4 похож, но в случае, если вы используете dronekit, я настоятельно рекомендую использовать Ardupilot / Copter вместо PX4; это мнение основано на опыте)
Попробуйте следующее в порядке
- в строке подключения, если wait_ready = false, то он никогда не будет ставить на охрану, поэтому вы попали в петлю.
Это происходит главным образом потому, что проверки, выполненные для проверки готовности, аналогичны проверкам, выполняемым при постановке на охрану.
Единственный случай, когда ожидания wait_ready = false, это когда контрольные маски постановки на охрану используются, чтобы избежать проверок.
2. http://ardupilot.org/copter/docs/parameters.html#arming-check-arm-checks-to-peform-bitmask
показывает список проверок, выполненных автопилотом при длительном вооружении маской, чтобы отключить определенные проверки.
Это должно позволить вам просматривать список систем для регулярных проверок в случае сбоя.
Это должно быть похоже на PX4 с вариациями терминологии и порядка, но основная логика будет очень похожа.
Другая вещь, которая может быть неясной, - это порядок операций.
Ваш исходный код (или код в целом) -> использование Dronekit на компьютере общается с автопилотом через Ardupilot / PX4 -> Автопилот затем пилотирует дрон согласно инструкциям
Вот предостережение о программировании дрона.
Вы почти во всех случаях программируете инструкции для автопилота (контроллера полета, который взаимодействует с помощью Adrupilot / PX4), который затем выполняет действия. Автопилот во всей своей мудрости может отказаться от выполнения любого из действий, если эти действия не пройдут его проверки.
Этот отказ со стороны Autopilots выполнить действия не отображается как ошибка, потому что это не ошибка. Вы дали ему правильное действие, и вам просто не хотелось его выполнять, поскольку вы провалили его проверки.
Это то, что может происходить в вашем случае.