Дрон потерял связь, навигация дала сбой или просело питание. Как понять, что произошло в полёте и какие события привели к аварии? Ответы стоит искать в логах автопилота — важно уметь сопоставлять параметры и читать графики.
5 ноября в 20:00 на открытом уроке курса «Разработчик ПО для дронов: ArduPilot, C++ и ROS 2» разберёте логи реальных аварий БПЛА и настройку Failsafe-сценариев.
Узнаете, какие данные записывает автопилот и как выгрузить DataFlash-логи через Mission Planner. На примере двух-трёх случаев рассмотрите сбои навигации, питания и связи. Разберёте графики EKF, IMU и токов, чтобы восстановить последовательность событий и разобраться в возможных причинах отказа.
Затем перейдёте к аварийным сценариям в ArduPilot. Настроите стандартный Failsafe через графический интерфейс и проверите поведение дрона при потере связи в симуляторе SITL.
Урок подойдёт C/C++- и Python-разработчикам, инженерам встраиваемых систем и специалистам по БПЛА, которые хотят глубже понимать работу автопилота. После занятия вы сможете увереннее разбирать полётные логи и проверять настройки реакции на сбои в симуляторе.
Урок проведёт Игорь Морозов.
Зарегистрироваться: https://vk.cc/d3mb1k
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
5 ноября в 20:00 на открытом уроке курса «Разработчик ПО для дронов: ArduPilot, C++ и ROS 2» разберёте логи реальных аварий БПЛА и настройку Failsafe-сценариев.
Узнаете, какие данные записывает автопилот и как выгрузить DataFlash-логи через Mission Planner. На примере двух-трёх случаев рассмотрите сбои навигации, питания и связи. Разберёте графики EKF, IMU и токов, чтобы восстановить последовательность событий и разобраться в возможных причинах отказа.
Затем перейдёте к аварийным сценариям в ArduPilot. Настроите стандартный Failsafe через графический интерфейс и проверите поведение дрона при потере связи в симуляторе SITL.
Урок подойдёт C/C++- и Python-разработчикам, инженерам встраиваемых систем и специалистам по БПЛА, которые хотят глубже понимать работу автопилота. После занятия вы сможете увереннее разбирать полётные логи и проверять настройки реакции на сбои в симуляторе.
Урок проведёт Игорь Морозов.
Зарегистрироваться: https://vk.cc/d3mb1k
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
👎2👍1
"Быстрый" контейнер deque
Встроенных списков в Python иногда может не хватать, поэтому покажем одну хорошую альтернативу. Deque может быть реализован c помощью модуля collections.
Deque предпочтительнее, чем обычный список, в тех случаях, когда нам нужны более быстрые операции добавления и вытягивания элементо из обоих концов контейнера, поскольку deque обеспечивает линейную сложность O(1) для операций добавления и выталкивания по сравнению со списком, у которого сложность по времени для тех операций составляет O(n).
Также для deque есть возможность использовать стандартные функции по типу sum, min, max и тому подобные.
📲 Мы в MAX
Подписывайтесь на канал 👉@pythonofff
Встроенных списков в Python иногда может не хватать, поэтому покажем одну хорошую альтернативу. Deque может быть реализован c помощью модуля collections.
Deque предпочтительнее, чем обычный список, в тех случаях, когда нам нужны более быстрые операции добавления и вытягивания элементо из обоих концов контейнера, поскольку deque обеспечивает линейную сложность O(1) для операций добавления и выталкивания по сравнению со списком, у которого сложность по времени для тех операций составляет O(n).
Также для deque есть возможность использовать стандартные функции по типу sum, min, max и тому подобные.
📲 Мы в MAX
Подписывайтесь на канал 👉@pythonofff
🔥1
Как проверить существование переменной в Python?
Вы можете использовать in locals() или in globals(), чтобы проверить переменная существует в Python, разница только:
in locals() проверяет если переменная объявлена в локальной зоне видимости
in globals() проверяет если переменная объявлена в глобальной зоне видимости
📲 Мы в MAX
Подписывайтесь на канал 👉@pythonofff
Вы можете использовать in locals() или in globals(), чтобы проверить переменная существует в Python, разница только:
in locals() проверяет если переменная объявлена в локальной зоне видимости
in globals() проверяет если переменная объявлена в глобальной зоне видимости
📲 Мы в MAX
Подписывайтесь на канал 👉@pythonofff
🔥2
Контекстные менеджеры
Контекстные менеджеры позволяют задать поведение при работе с конструкцией with: при входе и выходе из блока. Это упрощает работу с ресурсами в части их захвата и освобождения; транзакциями, когда нужно либо полностью закончить транзакцию, либо откатить ее целиком.
Простейшей функцией, использующей данный принцип является функция open. Каждый раз, когда мы открываем файл, нам необходимо его закрыть, чтобы вытолкнуть выходные данные на диск (на самом деле Python вызывает метод close автоматически, но явное его использование является хорошим тоном).
Чтобы каждый раз не вызывать метод close мы можем воспользоваться контекстным менеджером функции open, который автоматически закроет файл после выхода из блока.
📲 Мы в MAX
Подписывайтесь на канал 👉@pythonofff
Контекстные менеджеры позволяют задать поведение при работе с конструкцией with: при входе и выходе из блока. Это упрощает работу с ресурсами в части их захвата и освобождения; транзакциями, когда нужно либо полностью закончить транзакцию, либо откатить ее целиком.
Простейшей функцией, использующей данный принцип является функция open. Каждый раз, когда мы открываем файл, нам необходимо его закрыть, чтобы вытолкнуть выходные данные на диск (на самом деле Python вызывает метод close автоматически, но явное его использование является хорошим тоном).
Чтобы каждый раз не вызывать метод close мы можем воспользоваться контекстным менеджером функции open, который автоматически закроет файл после выхода из блока.
📲 Мы в MAX
Подписывайтесь на канал 👉@pythonofff
👍2
Вывод значения по умолчанию для отсутствующего ключа словаря
Если вы обратитесь к несуществующему ключу словаря, то это вызовет исключение. Избежать этого можно, вызывая метод get. В примере метод выдает None (по умолчанию) или заданное значение аргумента.
📲 Мы в MAX
Подписывайтесь на канал 👉@pythonofff
Если вы обратитесь к несуществующему ключу словаря, то это вызовет исключение. Избежать этого можно, вызывая метод get. В примере метод выдает None (по умолчанию) или заданное значение аргумента.
📲 Мы в MAX
Подписывайтесь на канал 👉@pythonofff
👍1
Декораторы
Очень важная тема, с помощью декорирования можно писать очень удобные логи или существенно расширять функции.
Многие библиотеки работают с использованием декораторов: Flask и aiogram хорошие тому примеры.
Мы показываем лишь простой пример, возможности куда шире. Позже покажем пример использования с упоминаемыми выше библиотеками.
📲 Мы в MAX
Подписывайтесь на канал 👉@pythonofff
Очень важная тема, с помощью декорирования можно писать очень удобные логи или существенно расширять функции.
Многие библиотеки работают с использованием декораторов: Flask и aiogram хорошие тому примеры.
Мы показываем лишь простой пример, возможности куда шире. Позже покажем пример использования с упоминаемыми выше библиотеками.
📲 Мы в MAX
Подписывайтесь на канал 👉@pythonofff
👍1
Удаление дубликатов в списке
Первое что приходит на ум — преобразовать список во множество и обратно. Это хороший и рабочий способ. Но если вам нужно сохранить последовательность, то этот способ не подойдёт. С этой задачей легко справится OrderedDict из модуля collections
📲 Мы в MAX
Подписывайтесь на канал 👉@pythonofff
Первое что приходит на ум — преобразовать список во множество и обратно. Это хороший и рабочий способ. Но если вам нужно сохранить последовательность, то этот способ не подойдёт. С этой задачей легко справится OrderedDict из модуля collections
📲 Мы в MAX
Подписывайтесь на канал 👉@pythonofff
👍2
Как красиво напечатать json в Python?
Вы можете использовать json.dumps() в Python, чтобы красиво напечатать json.
📲 Мы в MAX
Подписывайтесь на канал 👉@pythonofff
Вы можете использовать json.dumps() в Python, чтобы красиво напечатать json.
📲 Мы в MAX
Подписывайтесь на канал 👉@pythonofff
👍1