Создание собственной системы стабилизации

RW9UAO

можно еще проще. смотрим на акселерометры когда угловая скорость с гироскопа = 0. таких моментов немного, но они есть =) с помощью арктангенса вычисляем угол отклонения. а по гироскопам рулим через пародию на ПИД. одним из параметров для регулятора будет отклонение от вертикали. на самолете такой метод работает. на квадрике надо полетать, поснимать логи и посмотреть. у меня двухосевой инклинометр от AD показывал довольно достоверно даже при наличии угловой скорости на модели типа летающее крыло (плосколет F-22).

SergDoc

Я вот как себе на данный момент представляю:
1 - опрашиваем гироскопы
2 - читаем аксель
3 - с “какой-то магией Калмана” высчитываем точные вектора
4 - с помощью ПИДов (регулируем PWM) даём обратные вектора для гашения отклонений
5 - Скрещиваем пальцы на ногах “руки то заняты” смотрим как аппарат рухнет и идём разрабатывать новую теорию
Эх бало бы так всё просто ан нет ручки то кривенькие так что это надолго:)

SergDoc

Чёт совсем запутался Aref=1650mV тобиш делим на 1023 получаем 0.62mV/дел. какого же болта ржавого мне гироскопы выдают 367, 364, 357 нулевые показания при примерно 1100mV на выходе? то что они разные фиг с ними -почему маленькие то такие?

Пардон кренка здохла:)

SergDoc

И так, пока проблемы две:
Таймеры заняты шимами - опрос гир и акселя придётся проводить поллингом;
Акселерометр - прыгает( 0-255) скорей всего попадаю на перезапись

SergDoc

Дошло наконец, 0 = 255 данные акселерометра представляются так положительное ускорение от 0 до 255 а отрицательное от 255 до 0, или наоборот ещё толком не понял щас проблема, как это представить да ещё без ошибок ибо одинаковые значения и в плюсе и в минусе могут быть, для примера Z= 55 в горизонтальном лежачем положении (ускорение свободного падения) переворачиваем плату получаем 200 - резко дёргаем вверх (низом к верху) получаем опять 55 - ну и в какую сторону летим блин…

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

или пока сделать например 128 - 0 отрицательное 0 - 126 -положительное а как же, большие ускорения

смотреть в гироскоп какой угол? а если гира в 0 - смещение по оси без крена или неуспел гироскоп уже не показывает угловую скорость?

вроде понял в мультивийной прошивке - I2C Accelerometer ADXL345 также работает только адресация регистров другая буду пробовать…

ivereninov

С гироскопов снимаем угловую скорость, пересчитываем по формуле omega=U*gain+bias , интегрируем для получения угла. Трехосевой акселерометр позволяет определять положение с точностью до поворота вокруг вектора .Кладем на горизонтальную поверхность , по оси Z Датчик должен мерить g, по остальным нули.По степени вхождения g в оси x y можно определить крен и тангаж при отсутствии линейных ускорений.

SergDoc
ivereninov:

С гироскопов снимаем угловую скорость, пересчитываем по формуле omega=U*gain+bias , интегрируем для получения угла. Трехосевой акселерометр позволяет определять положение с точностью до поворота вокруг вектора .Кладем на горизонтальную поверхность , по оси Z Датчик должен мерить g, по остальным нули.По степени вхождения g в оси x y можно определить крен и тангаж при отсутствии линейных ускорений

Как работает гироскоп и акселерометр я знаю, проблема в другом - программирование (я в этом не силён), акселерометр выдаёт byte - восмиразрядное беззнаковое число максимум 255 при этом он его выдаёт в дополнительном коде тобиш от 0 до +177 и от -1 до -178 я же вижу числа от 0 до +255 сейчас решаю проблему как это считать…

ivereninov

А переменная в которую пишется результат точно signed?

Просто в Вашем сообщение противоречие.

SergDoc:

беззнаковое число максимум 255 при этом он его выдаёт в дополнительном коде тобиш от 0 до +177 и от -1 до -178 я же вижу числа от 0 до +255 сейчас решаю проблему как это считать…

То есть акселерометр должен отдавать знаковое, а Вы получаете беззнаковое?

SergDoc
ivereninov:

То есть акселерометр должен отдавать знаковое, а Вы получаете беззнаковое?

а как правильно обозвать? sbyte оно не понимает.

в бинарном виде так и есть он выдаёт знаковое

SergDoc

Блин ещё вчера вечером перекопал все а туда даже не глянул, спасибо!!!

И цифирки правильные побежали:)😃😃

SergDoc

Попытался запустить один из фильтров из нета (псевдокальман) показания хреновые пойду другим путём, ой чует моё сердце придётся всё считать, ладно хоть идеи появились😁

SergDoc

А с гироскопами можно просто до одурения поступить, как впринципе сделано в куке по причине того что “Углова́я ско́рость — векторная величина, характеризующая скорость вращения тела. Вектор угловой скорости по величине равен углу поворота тела в единицу времени, а направлен по оси вращения согласно правилу буравчика, то есть, в ту сторону, в которую ввинчивался бы буравчик с правой резьбой, если бы вращался в ту же сторону.” - из учебника. Тоесть можно взять показания с гироскопа и сказать что это угол, а не угловая скорость и работать с этим углом, в куке ведь работает только какойнибудь коэффициент придумать?

ivereninov
SergDoc:

Тоесть можно взять показания с гироскопа и сказать что это угол, а не угловая скорость и работать с этим углом, в куке ведь работает только какойнибудь коэффициент придумать?

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

RW9UAO

а если угловую скорость разделить на время, то узнаем на сколько градусов мы уже наклонились =)
Сергей, будут конкретные вопросы - пишите тут, не стесняйтесь.

SergDoc
RW9UAO:

Сергей, будут конкретные вопросы - пишите тут, не стесняйтесь.

RW9UAO:

Сергей, будут конкретные вопросы - пишите тут, не стесняйтесь.

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