Создание собственной системы стабилизации
нашел в ардукоптере одну печальку. поскольку арду изначальн описался под самоль - там нет алгоритма расчета воздушной скорости (силы воздействия ветра)
полагая что ожидаемое ускорение мультироторного аппарата в плоскости горизонта можно описать как G * косинус угла наклона ( питч и крен) разделенное на массу аппарата
полагая что ускорение от внешнего воздействия также может быть описано a = f/m
немного поразмыслив если методом калибровки найти пропорцию kff определяющую неточность измерений между
тягамоторов * COS(кренпитч) = ускорение_в_горизонтальной плоскости * kff то любые внешние воздействия на аппарат будут эквивалентны вычисляемой величине. исходя из константы веса аппарата и получаемой экспериментально парусности можно будет вычислить даже скорость ветра
тяга моторов = сумма векторов акселерометров
тоесть сила внешнего воздействия = сумма векторов акселерометров * COS(кренпитч) - ускорение_в_горизонтальной плоскости * kff
как правило для внутрених целей стабилизации полета точное вычисления скорости воздушного потока не требуется. достаточно знать силу внешнего воздействия для того чтобы ее моментально компенсировать
тяга моторов = сумма векторов акселерометров
Это как ? И вообще, поделитесь секретом - как вычисляется линейное ускорение коптера по осям ? (никогда не копался в готовых кодах), есть подозрение что вещь эта довольно “шумная” и для расчетов непригодная…
проекция акселей на плоскость горизонта?
github.com/diydrones/ardupilot/…/AP_AHRS_DCM.cpp#L…
_accel_ef[i] = _dcm_matrix * _ins.get_accel(i);
_accel_ef[i] - это 3д вектор где
_accel_ef[i].x - ускорение на север
_accel_ef[i].y - ускорение на восток
_accel_ef[i].z - ускорение вверх
_dcm_matrix - матрица поворотов (горизонт коптера)
_ins.get_accel(i) - конкретный акселерометр с номером i
или как читают регистры мпу чтобы получить значения гир и акселей?
есть подозрение что вещь эта довольно “шумная” и для расчетов непригодная…
в мпу6000 есть функционал встроенного фильтра, фильтрует неплохо. точность конечно желает лучшего но на нашем уровне пока в эту цену ничего лучшего нет
или как читают регистры мпу чтобы получить значения гир и акселей?
Нет, это всё ясно, (у меня рабочая, в плане стабилизации, собственная прошивка)), и в плане линейного ускорения понятно - что надо просто вычесть из “сырого” показания акселя текущую проекцию силы тяжести, вопрос в том что:
1.оси акселя офигенно шумят, просто сами, и от внешних вибраций…
2.всегда присутствует разброс у конкретного акселя по осям, т.е. надо кропотливо откалибровать каждую ось (возможно ли это вообще ? на практике)
3.показания уплывают при нагреве/остывании, (с этим ещё сложнее, в “назе” например аж внешний подогрев сделали)
4.(самое неприятное) вычитаемое значение проекции G (у меня кватернионы) имеет естественное запаздывание от реалтайма, в связи с этим происходят “выбросы” ускорения, которые непонятно как убирать…
Как можно вообще такие показания интегрировать, для получения скажем скорости, и уж того больше, расстояния ?? как эти трудности решаются в известных проектах ?
1.оси акселя офигенно шумят, просто сами, и от внешних вибраций…
фильтр датчика + программный фильтр
2.всегда присутствует разброс у конкретного акселя по осям, т.е. надо кропотливо откалибровать каждую ось (возможно ли это вообще ? на практике)
калибровка всех осей причём в обе стороны
показания уплывают при нагреве/остывании, (с этим ещё сложнее, в “назе” например аж внешний подогрев сделали)
в МПУ практически не плывут, ну если перепад не слишком большой ±15 градусов за пару секунд, где-то тут в ветке я когда-то экспериментировал с лсм - подсовывал под кулер ноута - как пьяный был, с мпу такого не наблюдается, в крайнем случае в датчике есть температурный датчик - можно пользовать его, конечно зависимость не совсем линейна - но похожа на правду
4.(самое неприятное) вычитаемое значение проекции G (у меня кватернионы) имеет естественное запаздывание от реалтайма, в связи с этим происходят “выбросы” ускорения, которые непонятно как убирать…
инерциалка не работает как иму, а раза в 4 медленней… можно и нужно фильтронуть дополнительно значения…
можно и нужно фильтронуть дополнительно значения…
Вопрос как ?
Тут делема: увеличиваешь “вес” акселя - реакция ускоряется (хорошо вроде), но как следствие на горизонт больше влияет центробежные ускорения (совсем не хорошо)… и как “фильтронуть” то ?
Тут делема: увеличиваешь “вес” акселя - реакция ускоряется (хорошо вроде), но как следствие на горизонт больше влияет центробежные ускорения (совсем не хорошо)… и как “фильтронуть” то ?
Динамически менять подтяг в зависимости от условий полета
или… попробовать вычитать горизонтальную проекцию ускорений - но тут тоже есть риск получить барона мюнхаузена который пытается себя вытащить за волосы из болота.
-
3д вектор компаса. он почти всегда может по двум точкам определить плоскость горизонта. т.е. не даст ось лишь при соосности питча или рола четко на магнитный север, нужно учитывать манитное на клонение и перекосы в установке
-
крен питч у коптера постоянно меняется и можно сравнивать ожидаемое от изменения крена ускорение с реальным (но тут немного будет мешать сила воздействия ветра) т.е зная что при крене 5град имеем ускорение тяга * cos(угол) - при этом дельта этого выражения с реальным ускорением либо внешний толчок либо ветер либо ошибка горизонта
Динамически менять подтяг в зависимости от условий полета
Опять “мюнхаузен”… - в “условиях полета” опять засел аксель… А ведь это самый каверзный вопрос вообще в системах стабилизации на основе акселерометра (😃) - как отделить чистое ускорение от направления силы тяжести если физически для датчика это одно и то-же… если б не это, то вопрос удержания позиции в точке вообще бы не стоял… (нужели Калману звонить?)))
как отделить чистое ускорение от направления силы тяжести если физически для датчика это одно и то-же…
очень просто, посчитать по ГНСС и барику линейное ускорение, добавить +9.8м/с2 по вертикали и сравнить с акселем, результатом сравнения крутить своё представление о ориентации в пространстве.
очень просто,
Есть реальные результаты ?
посчитать по ГНСС и барику линейное ускорение
Даже если и можно с них “выдернуть” ускорение, то только в длительном промежутке времени… (о точности я вообще молчу, только вот обсуждали…), а для интегрирования ускорения в пройденный путь пошустрей надо работать…
Я как то скептически смотрю на всю эту “математическую алхимию”… (могу сильно ошибаться, готов к критике…)
Есть реальные результаты ?
Олег, можешь сам проверить - установить мою “виртуалку”, если нет ф4дисковери, могу под твою плату с Ф4 выводы переделать. Собственно там нужны только два с половиной усарта. В реале продемонстрировать пока не могу, если времени сегодня-завтра хватит залить в F4BY, покажу тест на “карусельке”.
Даже если и можно с них “выдернуть” ускорение, то только в длительном промежутке времени… (о точности я вообще молчу, только вот обсуждали…), а для интегрирования ускорения в пройденный путь пошустрей надо работать…
Так я ж схему рассказывал на этой ветке - нужно сравнивать проинтегрированное до пути ускорение с ГНСС. Методичку тоже давал и ещё
В реале продемонстрировать пока не могу
Уже могу, но нужно “партнера” для сравнения. Граждане одноветочники, поделитесь дфу-файлом самолетной прошивки Арду для F4BY, зашивка через планер зело напрягает (дефицит бубнофф у мну))). Надеюсь, что планер через блюпуп тоже без бубнов зацепится.
Олег, можешь сам проверить
Буду поверять всё однозначно… (только вот раму закончу переделывать после очередной проверки, уже четвертую, наверно… 😃)
установить мою “виртуалку”
Виртуалка твоя - “тема”…, задумка у меня приблизительно такая же есть - для смелых идей с математикой сделать одновременный реалтайм-вывод на экран (под управлением питона) графиков показаний датчиков /результатов расчета, короче чем больше тем лучше, пока только прикидываю как всё это обустроить… мешает что с питоном пока “на вы”…
задумка у меня приблизительно такая же есть - для смелых идей с математикой сделать одновременный реалтайм-вывод на экран (под управлением питона) графиков показаний датчиков /результатов расчета, короче чем больше тем лучше, пока только прикидываю как всё это обустроить… мешает что с питоном пока “на вы”…
Ну да, его “особость” много доставляет ) Зато когда вникнешь, получишь добротный и гибкий инструмент. Пиши, спрашивай, что смогу отвечу. Кста если сам захочешь к “виртуалке” подключиться, дам код без проблем
Арду для F4BY, зашивка через планер зело напрягает (дефицит бубнофф у мну))).
в папке планнера есть px4uploader.exe, всё остальное возьми у Алексея )))
в папке планнера есть px4uploader.exe, всё остальное возьми у Алексея )))
А через кнопки планера не работает?
Зашил трикоптер. Как записать логи на F4BY? Вдруг что интересное будет?
откалибровать и заармить - пойдут логи…
А через кнопки планера не работает?
я давно не прошивал))) Алексей прислал мне 2.1.5 - версию платы, я решил побыстрому залить - планнер свежий глюканул - залил уплоадером…
откалибровать и заармить - пойдут логи…
RC не калибровал, думаю не критично. Откуда логи взять? С сд ?
Вот видео
Откуда логи взять? С сд ?
видишь - синий двойным мыргает - преармчек, а пока не заармишь логи не запустятся…
видишь - синий двойным мыргает - преармчек, а пока не заармишь логи не запустятся…
значится нет логов… Ну собственно и так видно, причём увод тангажа вниз в начале - это видимо результат воздействия тангенциального ускорения раскрутки.