Сергей Ахрамович @AkhramovichSA
User
Information
- Rating
- 9,146-th
- Location
- Москва, Москва и Московская обл., Россия
- Date of birth
- Registered
- Activity
Specialization
Fullstack Developer, Software Architect
C++
Python
PHP
Delphi
Database
Creating project architecture
Погодите, им еще рано, не все сразу. То что у них взлетело и что-то работает -- это уже большое достижение.
Я как раз хочу сказать о позитивном. Если на Хабре опубликована данная статья о том, как молодая команда справилась с задачей, то можно предположить, что ещё десять команд реализовали подобный проект, но не стали о нём писать. А значит, есть ещё сто команд, которые пытались решить эту задачу.
Естественный процесс обучения, и я только рад тому, что это делается на реальном железе, а не в математических моделях.
Это подрастающее поколение из кванториумов.
Они еще не сталкивались с трудностями, которые возникают при создании и запуске новых проектов, будь то технические проблемы или бюрократические сложности.
Про измерение расстояния не знал, очень интересно. Уже нашел материалы, почитал как это реализовано.
А такой вопрос - ими можно как-то сканировать радиоэфир?
Эх, работали бы все так системы без задержек и сбоев. Для IMU кстати это еще применимо, так как он, на удивление, очень надежен и работает как часы. А вот по сигналам управлению с пульта, или ГНСС-датчика данные могу пропадать или существенно задерживаться.
Олег, такое уточнение. То, что вы называете режимом ACRO на самом деле не ACRO. Изучая различные материалы, я заметил, что это общее заблуждение. В коде реализована простая стабилизация угловой скорости или еще называют режим RATE или RATE_CONTROL.
В теории он должен работать как режим ACRO, т.е. увеличиваю джойстик по тангажу, квадрокоптер начинает вращаться, уменьшаю – он остается в заданном угле пока обратным движением джойстика не заставлю вращаться в обратном направлении. Но на практике дрон ведет себя по-другому.
Как я понял, режим ACRO должен еще отслеживать установленный угол после возврата джойстика в 0, т.е. это тот же режим ANGLE, только изменение угла происходит не джойстиком, а джойстик меняет угловую скорость вращения квадрокоптера.
В таких системах реального времени ничего ждать не надо, в IMU есть проверка на готовность данных, если данных нет, то пропускаем и обрабатываем цикл дальше.
Мне очень сильно помог вот такой проект: https://www.youtube.com/@carbonaeronautics
Там и гитхаб есть с простым учебным кодом и сама книга: https://github.com/CarbonAeronautics?tab=repositories
https://github.com/CarbonAeronautics/Manual-Quadcopter-Drone/blob/main/Carbon_Aeronautics_Quadcopter_Manual.pdf
low-pass здесь стандартный, но надо делать конечно все дискретной форме, как и ПИД-регуляторы. Здравствуй z-преобразование :-)
Большие дроны вообще лучше на стальную цепь сажать :-)
В большинстве модулей ESP8285 (как правило на приемнике) или ESP32 используется как контроллер и реализуют логику, например FHSS. А за радиочасть отвечают микросхемы типа SX1276 которые подключены к микроконтроллеру по SPI.
Для ELRS и CRSF уже есть много готовых библиотек, например вот эта: https://github.com/BobbyIndustries/crsfSerial. Для ESP32 подключается легко.
Подвес обязательно делать делать и уж точно не из ниток. У вас маленький дрон и его отладка безопасна, а когда отлаживаешь дроны от 7 дюймов, то очень опасно. Мы для начала сделали одноосный подвес с жестким креплением и регулируемым противовесом. Можно быстро собрать из станочного профиля и цилиндрическим валом из нержавейки в подшипниках. Был правда момент когда он поднял подвес и попытался с ним улететь.
Ben Kenwright — A Beginners Guide to Dual-Quaternions.pdf
Примерный перевод главы «11. Результаты»:
В статье это не показано, так как это отдельная тема, но у меня есть публикация где такой подробный анализ проводится.
Я привел ссылку на видео где показано сравнение моделирования 3D-графики между обычными методами и методами с использованием бикватернионов.
Из своего опыта скажу, что при использовании бикватернионов вы убираете всю тригонометрию. Тригонометрические функции используются только для задания начальных условий, ну и для вывода отладочной информации в человекопонятном виде.
Возможно стоит подробно раскрыть тему операции бикватернионного умножения в отдельной статье.
Да, в статье приведен пример в 2D, хотя весь код в библиотеки можно применять для вычислений в трехмерном пространстве. Сделано это лишь для того чтобы и так не перегружать пример еще большим кодом.
Бикватернион лучше тем, что он в себе содержит полную информацию об ориентации и положении в пространстве объекта в одном числе, пусть и в сложном гиперкомплексном.
Используя этот математический аппарат можно, например, применять различные методы управления объектами, там обнаруживаются иногда очень интересные случаи.
Приведу пример такого случая.
При синтезе оптимального управления квадракоптером по высоте стояла задача: с высоты 100 м опуститься на 10 м.
С использованием математического аппарата векторов и углов ориентации квадракоптер просто уменьшал тягу винтов и опускался до нужной высоты.
При использовании бикватернионов квадракоптер повел себя иначе, он перевернулся винтами вниз, увеличил тягу и при прилете до требуемой высоты перевернулся обратно винтами вверх.
Бикватернион, по сути своей — дуальный кватернион q̃ = q1 + εq2.
Но часто его представляют в виде двух кватернионов, как это сделано в статье, поэтому здесь символ Клиффорда опущен, хотя его наличие надо всегда подразумевать у дуальной части q2.
Если совсем утрировать, то норма — это сумма квадратов компонентов бикватерниона, а модуль — корень квадратный из суммы квадратов компонентов бикватерниона.
Эти величины используются в других операциях, например, в операции вычисления обратного бикватерниона (в коде dual_quaternion.js в методе inverse как раз реализована операция деления бикватерниона на дуальное число), или при использовании численных методов интегрирования бикватерниона приходится его нормировать.
Также неверно называть его «комплексный кватернион».