Помогите разобраться с формулами

Ребята с математическими способностями! Помогите разобраться с самоделкой. Я сделал по сути лазерную указку, на ардуино и сервоприводах, чтобы развлекать котов дома. Таких проектов много в интернете. Но эту конструкцию я засунул в корпус от светодиодной лампы и её можно вкручивать в стандартный патрон потолочной люстры, что даёт больший простор для движения луча, чем аналогичные конструкции. Питание 220 вольт через преобразователь. Всё работает отлично, котькам нравится. На фото одна из ранних компоновок указки, на соплях.

Помогите разобраться с формулами Arduino, Электроника, Самоделки, Высшая математика, Длиннопост

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

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

Помогите разобраться с формулами Arduino, Электроника, Самоделки, Высшая математика, Длиннопост

Два серводвигателя двигают качалку с закреплённым на ней лазером по двум осям. Голубая серва вращает синюю по оси Х, а синяя - уже вращает лазером по осям Z и Y. Датчик акселерометра закреплён неподвижно. Ось Х датчика совпадает с осью патрона, в котором смонтировано всё устройство. То есть, в зависимости от люстры, ось Х может быть направлена и вертикально вниз и быть под углом к земле.

Получается, у меня есть ускорения по трём осям AX, AY, AZ от 0 до 9,8g. Надо для двух серв вычислить углы поворота, при которых качалка будет "смотреть" вертикально вниз.

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

Arduino/Ардуино проекты

12 постов360 подписчиков

Добавить пост

Правила сообщества

— Не оскорблять администрацию.

— Не оскорблять других участников.

— Не затрагивать тему политики.

— Не материться!

— Не допускаются расистские высказывания, сексизм, национализм.

— Запрещена реклама сторонних проектов, товаров, сайтов, блогов, ютуб каналов.

— Нельзя публиковать картинки и комментарии явно сексуального характера.

— Нет спаму и фишингу!

1
Автор поста оценил этот комментарий

Эта формула для чувствительности +- 2g. Для этого нужно сырой сигнал из регистра делить на 256.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Понимаю, там по умолчанию чуствительность как раз +-2g выставляется. А pow() это же возведение в степень, верно?

показать ответы
1
Автор поста оценил этот комментарий
Гирокомпас - тут вообще мимо кассы. (сделать на МЕМС гироскоп такого класса, который может "почувствовать Землю" - чверхзадача)

занять определенное положение в пространстве и после этого показывать относительные углы поворота относительно оси

Это относится к т.н. "свободному гироскопу " - быстровращающийся "волчек" закрепленный в кардановом подвесе, таким образом чтобы он мог менять свю ориентацию.  Теоретически через продолжительное время, за счет силы Кориолиса должен стать соосным с Землей (ибо только в этом полдожении сила Кориолиса перестает на него действовать). И по его ориентации - можно установить направление на Север, и "гироскопическую широту". Причем тут - как раз достаточно одного гироскопа. Но на практике там все весьма тернисто, и это точно не про МЕМС.

МЕМС- это НЕсвободный гироскоп. Он просто показывает проекцию угловой скорости (градусов/сек) на свою ось чевствительности (естественно в трехмерном пространстве нужно 3 оси) интегрируя значения угловой скорости - можно получить углы ориентации. Вернее их изменение (ибо операция интегрирования дает неопределенную констатнту. Вы знаете на сколько градусов вы повернулись, но точное положение можно установить только относительно начального положения. Причем с течением времени - накапливается ошибка).

Обычно для получения полной ориентации используют спарку гироскопов и акселеромеров. Показания которых объединяют достаточно хитрым фильтром. Т.к. акселерометр - дает статические углы крен/тангаж, без долговоременного накопления погрешности, но при этом он чувствиетелен к паразитным линейным ускорениям, помимо силы тяжетсти. Простейшая бытовая аналогия: вы пытаетесь отвесом (грузом на веревочке) определить вертикаль. И все будет хорошо, до тех пор пока вы не попытаетесь сделать это в трогающемся поезде. Тут отвес - начнет безбожно врать, показывая отклонение (по ходу поезда) которго на самом деле нет. Тут и должен выручить гирокоп - который покажет что угловой скорости то не было ! Следовательно не было и поворота (изменения угла) а следовательно - это ускорение не от силы тяжести а от линейного перемещения. Кроме того, акселерометрические углы - обычо гораздо более шумные от всяких вибраций. Потому производится достаточно ехидное комплексирование таким образом что постоянная составляющая - берется от акселерометров а изменения - от гироскопов.

Сам по себе фильтр ориентации - это достаточно хитрая штука, которая обычно делается в кватернионах (гиперкомплексных числах). Тут достаточно "жирный" раздел прикладной математики. Мануалов полно, но раскурить их не так просто. Есть готовые библиотеки (разной степени кривости), но все равно надо уметь приделать их к своей системе (как минимум, надо правильно сделать декомпозицию выходного кватерниона ориентации на желаемые оси). Тупо "скопипастить не разбираясь" - обычно не получается или получается криво.

Причем отдельная песня (причем матерная)  - это угол азимута. Тут не такой удобной штуки как сила тяжести. Интерирование гироскопа, как уже было сказано - дает постепенно накапливающуюся погрешность. Поймать скорость суточного вращения Земли МЕМС-ом - даже не пытайтесь. Обычно ради этого дела вводят еще и магнитометр (аналог магнитного компаса), либо "двухантенный GPS" - который за счет разнесеного диполя из 2 антен - дает помимо координат еще и угол оринетации, и все это дело - коплексируется с данными гироскопов и акселерометров .

раскрыть ветку (1)
Автор поста оценил этот комментарий
Мдаа. Задачка... Хорошо что мне такой точности не нужно. Кстати в этом чипе и гироскоп и акселерометр и магнитометр есть. Там же ещё интегрированы какие-то фильтры. Так то чип богатый, разбираться только трудно без специальных знаний.
показать ответы
1
Автор поста оценил этот комментарий

Если совсем просто, то углы наклона по акселерометрам atan2(Ax,sqrt(Ay^2+Az^2)) и atan2(Ay,sqrt(Ax^2+Az^2)).  Где atan2(x,y) - четырехквадрантная ф-ция арктангенса отношения x/y (обычно есть во всех языках программирования в том или ином виде).

Масштаб ускорения - не важен. Важно чтобы все акселерометры работали в одинаковом масштабе (вычисляются отношения).

Но:

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

2) акселерометрический угол - чувствителен  линейным ускорениям (ибо это по сути "отвес" , который имеет свойство отклоняться в сторону, если вы пытаетесь мерить им вертикаль, стоя в вагоне трогающегося поезда). У вас к счастью это не движущаяся штука вроде беспилотника (тогда бы было совсем плохо), но тем не менее идеально закрепить датчик в центре вращеня - не выйдет, следовательно при работе моторов у вас там будут посторонние ускорения (помимо силы тяжести).  Кроме того моторы дают вибрацию, а акселерометры - ее замечательно "ловят".  Короче там придется изгаляться и фильтровать это дело и что будет оптимумом - вот так со стороны сказать сложно.

раскрыть ветку (1)
Автор поста оценил этот комментарий
Благодарю! Вибраций тоже не будет, так как мне нужно определить вертикаль только один раз в начале. Я уже подумывал об изменении подвеса лазера. Не хотел усложнять.
показать ответы
Автор поста оценил этот комментарий

2.6.5 и 2.8.1 почитайте. через deeplearning например.

https://www.deepl.com/translator

раскрыть ветку (1)
Автор поста оценил этот комментарий

Да, читал я... Не осилил. Какие ассиметричные режимы ориентации, гистерезис... Слишком технологично, я не в теме там совсем.

Автор поста оценил этот комментарий

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

Иллюстрация к комментарию
Иллюстрация к комментарию
раскрыть ветку (1)
Автор поста оценил этот комментарий

Тем не менее на нас всех и на этот акселерометр действует ускорение свободного падения. Вот его датчик всё время чуствует, только в падении оно изменяется. Например акселерометр во внешних дисках блокирует головки, если гравитация внезапно меняется, ждёт падения.
Ну вот могу приложить ссылку на даташит к датчику.
https://github.com/Arduinolibrary/DFRobot_Gravity_BMI160_6_A....
Там есть и про положение в пространстве, только я не осилил.

показать ответы
Автор поста оценил этот комментарий

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


почитайте, что такое гирокомпас. )

раскрыть ветку (1)
Автор поста оценил этот комментарий

Да это мне всё понятно. Я тут типа того дяденьки, который говорил "Электроника там, кибернетика, это мне всё понятно. Вы мне лучше расскажите как в подушечки павидлу засовывают".
Всё таки применить гироскоп в данном конкретном случае не получится, если только не питать конструкцию от отдельного источника питания. Тут ведь как. Я в патрон её вкрутил, и появилось питание, программа запускается, все датчики сбросились и гироскоп в том числе. И секунды через две можно делать измерения. Гироскоп здесь всегда будет показывать 0 значения. А вот акселерометр в покое всегда чувствует направление к земле. Вот его и надо мне юзать.

показать ответы
Автор поста оценил этот комментарий

В покое гироскоп бесполезен. Вроде так. В покое он по всем осям показывает 0.

показать ответы
4
Автор поста оценил этот комментарий

// Расчет крена и тангажа (вращение вокруг оси X, вращение вокруг оси Y)

roll = atan(Y_out / sqrt(pow(X_out, 2) + pow(Z_out, 2))) * 180 / PI;

pitch = atan(-1 * X_out / sqrt(pow(Y_out, 2) + pow(Z_out, 2))) * 180 / PI;

раскрыть ветку (1)
Автор поста оценил этот комментарий

а точно, я с этого угла не рассматривал систему. Спасибо

показать ответы
Автор поста оценил этот комментарий
Может гироскоп имелся ввиду? Акселерометр вроде измеряет движение объекта
раскрыть ветку (1)
Автор поста оценил этот комментарий

неа, гироскоп углы поворота меряет по осям, а вот акселерометр ускорение. В неподвижности для вот этого датчика, если он лежит на спине, по оси зет 9,8, по остальным осям 0 ускорение.

показать ответы