Специальные цены   новые товары
+ Ответить в теме
Страница 73 из 165 ПерваяПервая ... 63 71 72 73 74 75 83 ... ПоследняяПоследняя
Показано с 2,881 по 2,920 из 6569

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

Тема раздела Квадрокоптеры. Общие вопросы в категории Квадрокоптеры и мультироторы; Сообщение от oleg70 По моему "узел" стабилизации выполнен на "отлично", неужели для достижения этого результата необходимы РТОСы, "Калманы" и прочая ...

  1. #2881

    Регистрация
    17.06.2011
    Адрес
    Минск
    Возраст
    39
    Сообщений
    1,941
    Цитата Сообщение от oleg70 Посмотреть сообщение
    По моему "узел" стабилизации выполнен на "отлично", неужели для достижения этого результата необходимы РТОСы, "Калманы" и прочая экзотика ??
    А вы попробуйте сделать то же самое без всяких Калманов и прочей экзотики, и нам покажите

    Цитата Сообщение от oleg70 Посмотреть сообщение
    Чего хотят люди от летательного аппарата в виде "четырех моторов на двух палках"
    Все просто, хотят сделать автопилот. Та же Арду может управлять не только двумя палками с моторами, а еще и самолетом и ровером(машинкой).

    Я на своем опыте могу сказать, что разные дилетанские мысли типа "Так там же все просто" начинают биться о скалы, когда надо обработать стони ситуаций, например человек поставит моторы другие или пропы большие, в полете откажет RC, GPS, телеметрия и другие подсистемы... и автопилот должен уметь обработать эти ситуации. Вот из способности обработать такое и выливается действительно хорошие мозги за которыми носится весь мир.
    Конечно, вышеупамянутый КК может летать, но что будет если у вас пропадет соединение с пультом управления??? Все кирдык ему будет (в крайнем случае сядет, если повезет). Топовые контроллеры умею выходит из этой ситуации включая RTL.
    Обработка сигнала от GPS - казалась бы тривиальна, ан нет и тут найдется чем занять CPU. К сожалению, GPS за 20$ не может быть идеальным по определению и подкидывает нам бяки в виде скачущих координат, которые надо фильтровать...

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

    Цитата Сообщение от oleg70 Посмотреть сообщение
    вряд ли ключевым и необходимым фактором является какая нибудь РТОС
    Где вы прочитали что это ключевой фактор?

  2.  
  3. #2882

    Регистрация
    14.02.2012
    Адрес
    Бийск
    Возраст
    37
    Сообщений
    202
    Цитата Сообщение от oleg70 Посмотреть сообщение
    Мне вот что понравилось:
    По моему "узел" стабилизации выполнен на "отлично", неужели для достижения этого результата необходимы РТОСы, "Калманы" и прочая экзотика ??
    По этому видео может сложится впечатление, что квадрик сам висит. Но это не так им рулят, горизонтальную стабилизацию нельзя сделать без датчиков позиционирования (gps, лидира, сонары, ИК дальномеры), квадрик будет плыть от завихрений воздуха и хобийными акселерометрами это не увидеть.
    А Калман да нам нужен, это всего лишь фильтр, он лучше фильтрует чем например средняя, но и более тяжел для железа. Если железо позволяет считать Калмана почему его не считать, конечному пользователю не так важно что внутри, ему важнее как летает.


    Как я вижу идеальный контролер "мозжечок".
    Беру две палки на них креплю моторы какие попались и 4 винта, при чем винты у меня почему то оказались разных размеров и шага. Ставлю мозжечок, без всяких настроек пидов и прочих коэффициентов. Включаю подбрасываю вверх, даю газу и .... чудо висит коптер в воздухе
    Пункт второй подключаю к компу читаю логи, программа на компьютере мне дает рекомендации, изменить центр тяжести, диаметр винтов, шаг и тд...
    Конечно мне еще кое что нужно, но об этом не пишу.
    Последний раз редактировалось WETErok; 09.10.2013 в 07:04. Причина: добавил фантазий

  4. #2883

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    Цитата Сообщение от Sir Alex Посмотреть сообщение
    Сообщение от oleg70
    По моему "узел" стабилизации выполнен на "отлично", неужели для достижения этого результата необходимы РТОСы, "Калманы" и прочая экзотика ??
    А вы попробуйте сделать то же самое без всяких Калманов и прочей экзотики, и нам покажите
    Калман не панацея, по простому его задача "подсекать" влияние акселя на горизонт при большом разбросе его показаний, тем не менее он всё равно придерживается матожидания (среднего значения в разбросе показаний) акселя. Так что при плохом датчике или хорошей вибрации он не поможет. Доказано практикой (не моей).
    А РТОС это просто средство организации многопоточного выполнения программы, удобство для программиста (знакомого с данной РТОС). У меня пока всё чисто на прерываниях, пока параллельных потоков не много РТОС не нужна.

  5. #2884

    Регистрация
    11.05.2008
    Адрес
    Великий Новгород
    Возраст
    38
    Сообщений
    3,939
    Записей в дневнике
    22
    теоретически, калман может компенсировать что угодно при наличии адекватной модели "ошибок". гироскопы плывут от температуры, аксели от вибраций, компас от электромагнитных наводок. вводим в фильтр показания градусника, второго акселя и датчика тока — вуаля, все ошибки исправлены.

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

  6.  
  7. #2885

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Ага, ща начнём плодить популяции нейронов-шаманов а я та думаю, чем проц нагрузить

  8. #2886

    Регистрация
    17.06.2011
    Адрес
    Минск
    Возраст
    39
    Сообщений
    1,941
    Цитата Сообщение от WETErok Посмотреть сообщение
    Беру две палки на них креплю моторы какие попались и 4 винта, при чем винты у меня почему то оказались разных размеров и шага. Ставлю мозжечок, без всяких настроек пидов и прочих коэффициентов. Включаю подбрасываю вверх, даю газу и .... чудо висит коптер в воздухе
    Кстати, мне кажется такое вполне можно сделать, правда немного не так. Ставим все как вы написали, все разное, моторы, пропы... Ставим коптер на землю и даем ему команду "Пристрел", он потихоньку дает газ на каждый мотор по очереди и ждет момента отрыва от земли, как оторвался, записываем параметры мотора и так проверяем все моторы. Дальше эту информацию можно использовать для правильного управления. )))
    Ну и к компу подключаем, а нам, мотор 1 - низкая скорость реакциии. Мотор 2 - недостаточная тяга.... и т.п.

  9. #2887

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    Цитата Сообщение от HikeR Посмотреть сообщение
    калман может компенсировать что угодно при наличии адекватной модели "ошибок".
    любой алгоритм может компенсировать что угодно, если он будет это адекватно учитывать.

    посему послал калмана лесом, пока сам всё это не изобрету

  10.  
  11. #2888

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Во первых спасибо всем, что так активно отреагировали на мою реплику (провокационную) .
    Функции "мозгов" коптера все ж условно разбиваются на две основные части : это самостабилизация и "все остальное..", причем без нормальной первой части, вторая теряет всякий смысл..
    Я то и имел в виду первое.. , а дальше понятно, поле для деятельности безгранично (ограничивается только мощью "камня" и уровнем математики)..
    Цитата Сообщение от WETErok Посмотреть сообщение
    4 винта, при чем винты у меня почему то оказались разных размеров и шага.
    Как раз "Калман" то и не позволит Вам менять никакие физические характеристики аппарата, один раз подобранная (с большим трудом) "мат. модель" будет действительна только для одной конфигурации...
    Цитата Сообщение от Sir Alex Посмотреть сообщение
    а RTOS - это просто облегчение себе работы
    Вещь конечно "вкусная" но насчет упрощения работы - вопрос очень даже спорный...
    (Я б не сел в самолет, управляемый "Windows" )
    Последний раз редактировалось oleg70; 09.10.2013 в 22:52.

  12. #2889

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Цитата Сообщение от oleg70 Посмотреть сообщение
    Я б не сел в самолет, управляемый "Windows"
    У них фамилии разные

    Цитата Сообщение от oleg70 Посмотреть сообщение
    Как раз "Калман" то и не позволит Вам менять никакие физические характеристики аппарата, один раз подобранная (с большим трудом) "мат. модель" будет действительна только для одной конфигурации...
    Есть ещё слово такое загадочное - Адаптивный?
    Последний раз редактировалось SergDoc; 09.10.2013 в 23:44.

  13. #2890

    Регистрация
    14.02.2012
    Адрес
    Бийск
    Возраст
    37
    Сообщений
    202
    Я написал что нельзя висеть стабильно
    Цитата Сообщение от WETErok Посмотреть сообщение
    Но это не так им рулят, горизонтальную стабилизацию нельзя сделать без датчиков позиционирования (gps, лидира, сонары, ИК дальномеры), квадрик будет плыть от завихрений воздуха и хобийными акселерометрами это не увидеть.
    скажите я ошибаюсь или уже всё таки можно ?

  14. #2891

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Цитата Сообщение от SergDoc Посмотреть сообщение
    Есть ещё слово такое загадочное - Адаптивный?
    Я про него ("калмана") почитал и все что понял мой мозг: это то что, называть сей метод "фильтром" можно с большой натяжкой...
    Т.е. он позволяет получить искомую величину при ограниченном (не точном) или недостаточном количестве косвенных измерений с датчиков, ОН как бы "восстанавливает" правильное значение при "кривых" измерениях используя некую мат.модель (которую придется делать ручками и скорее всего экспериментально)...
    Про адаптивный ничего не нашел (возможно недочитал..), вещь сложная для понимания для моего среднего мозга..
    Сразу скажу - могу сильно ошибаться (даже очень)...

    Цитата Сообщение от WETErok Посмотреть сообщение
    скажите я ошибаюсь или уже всё таки можно
    То что можно - очевидно, вопрос: "как" и "с помощью чего" ???
    Последний раз редактировалось oleg70; 10.10.2013 в 22:15.

  15. #2892

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Имеется возможность самоадаптации какими-то магическими способами - изменение матрицы ковариаций в реальном времени, но блин надо чтобы кто-нибудь это расказал "нормальным" языком, а то блин куча букав, а потом бац формула готова, а откуда куда и чё вообще - х.з. , у нас физик в технаре такой был, чё-то сам себе бубнит, чё-то рисует на доске - короче приходилось приходить с занятий и блин по учебникам выяснять, чтоже мы сегодня изучали, слава богу хоть на экзаменах адекватный был
    Одной из основных проблем, с которой сталкиваются при работе с фильтром Калмана, является то, что как модель самой системы, так и модель измерений неидеальны. Статистические свойства шумов, а именно, их ковариационные матрицы являются теми параметрами, от которых зависит точность оценивания вектора состояния системы, то есть точность работы фильтра.
    Обычно начальные значения ковариационных матриц шума измерений и шума процесса выбираются путём анализа некоторых эмпирических данных или путём моделирования различных ситуаций и далее считается постоянной. Если в процессе использования этих данных выясняется, что работа фильтра неудовлетворительна, то требуется новая настройка ковариационных матриц шумов. Появляется задача адаптивной фильтрации – параллельно с оценкой вектора состояния системы оценивать статистические свойства шумов процесса и измерений (ковариационные матрицы) с целью повышения точности работы фильтра. Один из методов такой оценки – метод “Уточнение ковариации”.

  16. #2893

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Цитата Сообщение от SergDoc Посмотреть сообщение
    а то блин куча букав, а потом бац формула готова,
    Из за "мутности" и непонятности у меня возникает подозрение, что реально понимающих - не так уж и много...
    Можно заявить: "я запустил калман", а как доказать что он реально работает (и как эффективно) а не мешает ??

  17. #2894

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Кстати, а чё все к фильтру привязались то? допустим что ему до лампочки какой аппарат - ему нужно что только то дать нам правильные показания, естественно чем точнее тем лучше, остальное всё равно делать PID регулятору - вот тут начинается самое интересное, ну допустим угол, ускорение, скорость у нас есть, даже можем в какой-то краткосрочной перспективе и путь знать. А вот PID привязан уже жестко к типу аппарата (и далеко не всегда правильно), я думаю надо в эту сторону копать, а для фильтра хватит на первых порах - шумы собственные датчиков плюс заложить какой-то коэффициент на вибрации?

  18. #2895

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    Цитата Сообщение от SergDoc Посмотреть сообщение
    А вот PID привязан уже жестко к типу аппарата (и далеко не всегда правильно)
    Я вот ПИДы вообще не меняю, даже не знаю какие стоят, а мозги постоянно качуют с одного аппарата на другой. Аппараты очень разные... Для себя сделал вывод, что ПИД для многоротора (для соразмерных аппаратов) менять не нужно, а вот для самолей всё равно придется подбирать под каждый. Даже если делать автонастройку, то только полуавтомат, т.е. мозг набирает статистику ошибок и даёт рекомендации по изменению, а дальше сам меняешь ручками. Иначе моск может проскочить "пространство стабильности" и завалить аппарат, причем это может произойти внезапно, просто при изменении внешних условий.

    450 12е пропы ДТ700

    диаганаль моторов 300 9е пропы 930KV, нестандартный аппрат, с очень большими мометами энерции по всем осям при указаных пропах

    ну и совсем другие мозги, рама 450 9е пропы 930 КВ


    Падение на первом вызвано отсечкой неправильно настроенного регуля, болтанка на 2,3м вызвана исключительно пилотом, ибо хотелось проверить качество управления.
    ПИды везде одинаковые!
    Более тонкую настройку ПИДов стоит выполнять только в части улучшения экономичности и то при наличии качественных регулей.
    Последний раз редактировалось rual; 11.10.2013 в 13:32.

  19. #2896

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    Вот ещё добавлю про датчики. Сегодня опять вернул Ф3Дискавери на 450ю раму для проверки отключения 4го мотора.
    При одинаковых алгоритмах на МПУ всё прилично, на ЛСМ горизонт кривит не по детски...

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

    Что собсна говорит о том, что такая особенность имеется у всех ЛСМ и её проявление не зависит от качества фильтра и параметров вибрации. Привет, ПиксХавку!

  20. #2897

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    У меня тут мысль в башке вертится:
    1. Цикл жесткий - магическое число - регули на 400, значит 2500 (ну можно с вариациями на тему)
    2. Фильтр даёт ПРЕДСКАЗАНИЕ положения в момент записи в таймеры, а не в момент расчёта
    3. ПИД обязан вычислить и записать в таймеры нужное ВОВРЕМЯ дабы небыло проскоков периода.
    Отсюда вытекают две вещи:
    внутренние фильтры датчиков придётся отключать! дабы повысить скорость считывания и не ловить старые данные - они будут не верны
    ну и как следствие нужен мощный фильтр дабы он справился с сырыми данными
    как доказательство - мелкоплата на LSM ТОЛЬКО с одноосевым Калманом до комплиментарного и на максимальной частоте выборки удалось хоть как-то завести аксель....

  21. #2898

    Регистрация
    17.06.2011
    Адрес
    Минск
    Возраст
    39
    Сообщений
    1,941
    Цитата Сообщение от SergDoc Посмотреть сообщение
    внутренние фильтры датчиков придётся отключать! дабы повысить скорость считывания и не ловить старые данные - они будут не верны
    Если в коде просто усреднять, то нет смысла, т.к. датчик сам это делает. А если отдавать Калману (и другим фильтрам), сможет ли он работать на 1Khz?

    Мне тут на днях показали код мультивия в частности инициализация ITG3200 - так вот, там Sampling Rate = F = 1KHz - то я то понимаю, что Мультивии не в состоянии на такой частоте обрабатывать данные от гиры = значит он тупо пропускает данные (скорее всего 50% и больше) - не понимаю зачем так сделано???

  22. #2899

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Не, так это выборка, скажем так, цифровой частью гиры показаний его аналогово датчика, а дальше он сам усредняет и в выходных регистрах уже усреднённые данные...
    нам же в таком случае надо следуюшее - в выходных регистрах датчика должны быть значения снятые с той же частотой, с которой позволит шина....

  23. #2900

    Регистрация
    17.06.2011
    Адрес
    Минск
    Возраст
    39
    Сообщений
    1,941
    Цитата Сообщение от SergDoc Посмотреть сообщение
    Не, так это выборка, скажем так, цифровой частью гиры показаний его аналогово датчика, а дальше он сам усредняет и в выходных регистрах уже усреднённые данные... нам же в таком случае надо следуюшее - в выходных регистрах датчика должны быть значения снятые с той же частотой, с которой позволит шина....
    Не, вот именно что усреднение там отключено, гира пишет на частоте дискретизации = 1Khz (можно и 8 включить, но там 1). Усреднения нет, поэтому все что не успеет прочитать Мультивии - пропадает.

  24. #2901

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    не Алексей, фильтруется оно
    Код:
    //ITG3200 and ITG3205 Gyro LPF setting
    #if defined(ITG3200_LPF_256HZ) || defined(ITG3200_LPF_188HZ) || defined(ITG3200_LPF_98HZ) || defined(ITG3200_LPF_42HZ) || defined(ITG3200_LPF_20HZ) || defined(ITG3200_LPF_10HZ)
      #if defined(ITG3200_LPF_256HZ)
        #define ITG3200_SMPLRT_DIV 0  //8000Hz
        #define ITG3200_DLPF_CFG   0
      #endif
      #if defined(ITG3200_LPF_188HZ)
        #define ITG3200_SMPLRT_DIV 0  //1000Hz
        #define ITG3200_DLPF_CFG   1
      #endif
      #if defined(ITG3200_LPF_98HZ)
        #define ITG3200_SMPLRT_DIV 0
        #define ITG3200_DLPF_CFG   2
      #endif
      #if defined(ITG3200_LPF_42HZ)
        #define ITG3200_SMPLRT_DIV 0
        #define ITG3200_DLPF_CFG   3
      #endif
      #if defined(ITG3200_LPF_20HZ)
        #define ITG3200_SMPLRT_DIV 0
        #define ITG3200_DLPF_CFG   4
      #endif
      #if defined(ITG3200_LPF_10HZ)
        #define ITG3200_SMPLRT_DIV 0
        #define ITG3200_DLPF_CFG   5
      #endif
    т.е. если Sampling Rate = F = 1KHz то на выходе LPF_188HZ - что вий вполне успеет прочитать...
    на f4 реально взять с датчика по полной...

  25. #2902

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Цитата Сообщение от SergDoc Посмотреть сообщение
    Кстати, а чё все к фильтру привязались то?
    Вот именно эту мысль я и толкаю.. Работы в плане доводки датчиков + ПИД и алгоритмов работы с ними не початый край, а этот аспект как то все "перескакивают" и сразу в "калманы"..
    Из своих наблюдений (в теме меньше года) могу сообщить:
    Попытки обработать данные с гиры/акселя до подачи в ИМУ особых реальных улучшений не дали..(применял усреднение, "медиану" без разн..) только тормозили цикл, ради смеха брал усреднение аж по 70 выборкам - бесполезно...
    Правда оговорюсь сразу - это злополучный LSM, гира от F3 вполне адекватная. Таким образом шумы акселя + гира при запущенных моторах не позволяют увеличить коэф. усиления (а равно о быстродействие) ИМУ и повысить качество стабилизации аппарата...
    Ставил свою платку на самолет (схема классика), - да - картина лучше, но при "кривом" винте (трава налипла), один раз была явная потеря контроля, чего уж говорить о четырех моторах, создающих в рабочем диапазоне МАССУ резонансов !

  26. #2903

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Цитата Сообщение от rual Посмотреть сообщение
    Я вот ПИДы вообще не меняю,
    кстати, да, ПИД скорее сильней привязан непосредственно к свойствам датчиков + настройки их усиления...

  27. #2904

    Регистрация
    17.06.2011
    Адрес
    Минск
    Возраст
    39
    Сообщений
    1,941
    Цитата Сообщение от SergDoc Посмотреть сообщение
    т.е. если Sampling Rate = F = 1KHz то на выходе LPF_188HZ - что вий вполне успеет прочитать... на f4 реально взять с датчика по полной...
    Честно говоря, у меня нету всего кода, т.к. это в Сашиной прошивке (mahowii), но строка которая должна была залить тот самый делитель, закоменчена:
    Код:
    //  i2c_writeReg(ITG3200_ADDRESS, 0x15, ITG3200_SMPLRT_DIV); //register: Sample Rate Divider  -- default value = 0: OK
    А по умолчанию, делитель = 0, т.е. 1KHz

    P.S. Ха, так в твоем куске кода, делитель всегда равен 0 ))))

  28. #2905

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    так смотри ITG3200_SMPLRT_DIV 0 и ITG3200_DLPF_CFG 0 это максимум датчика т.е. 8КГц считывание и 256Гц на выходе это при времени цикла 3906 вполне успеваемая цыфра я не работал с этим датчиком, но так понимаю, эти два регистра связаны между собой...

  29. #2906

    Регистрация
    13.03.2011
    Адрес
    Montreal, Canada
    Возраст
    38
    Сообщений
    2,291
    Записей в дневнике
    19
    Цитата Сообщение от Sir Alex Посмотреть сообщение
    Калманов
    Цитата Сообщение от rual Посмотреть сообщение
    Калман
    Цитата Сообщение от HikeR Посмотреть сообщение
    калман
    Цитата Сообщение от oleg70 Посмотреть сообщение
    калмана
    Цитата Сообщение от WETErok Посмотреть сообщение
    Калмана
    Цитата Сообщение от SergDoc Посмотреть сообщение
    Калмана
    )))

    Напомню 7-го числа начался отличный курс по цифровой обработке сигналов https://www.coursera.org/course/dsp я записался, но пока из за проблем со временем не начал...

    далее через 2 дня начнется курс Machine Learning от Стэнфорда! https://www.coursera.org/course/ml

    + кореш мой проходит сейчас Artificial Intelligence for Robotics https://www.udacity.com/course/cs373
    Очень доволен, что с курсом есть необходимый материал по азам линейной алгебры. И кстати там есть урок по Калману. Друг сказал что сперва не въехал, а потом допер и все как на ладони стало. Курс этот от фрица, препода из Стэнфорда, который участвует в проекте по автономным гугломобилям.

  30. #2907

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Это осеннее обострение, в аналы(слово то какое) медицины войдёт как Калманомания - похоже оно заразно

  31. #2908

    Регистрация
    14.02.2012
    Адрес
    Бийск
    Возраст
    37
    Сообщений
    202
    Цитата Сообщение от mahowik Посмотреть сообщение
    проходит сейчас Artificial Intelligence for Robotics https://www.udacity.com/course/cs373
    Очень доволен
    Я в прошлом году или позапрошлом окончил его. Отличный курс, но потом наступает некоторое разочарование, когда начинаешь реально что то делать то оказываться что тебе рассказали лишь введение, и что бы реально применить нужно самостоятельно перелопатить гору информации. может это и к лучшему. Для себя вынес полезного это алгоритм Particle Filter, классная вещь Калман не нужен

  32. #2909

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    Цитата Сообщение от SergDoc Посмотреть сообщение
    1. Цикл жесткий - магическое число - регули на 400, значит 2500 (ну можно с вариациями на тему)
    2. Фильтр даёт ПРЕДСКАЗАНИЕ положения в момент записи в таймеры, а не в момент расчёта
    3. ПИД обязан вычислить и записать в таймеры нужное ВОВРЕМЯ дабы небыло проскоков периода.
    Это так в базефлайте? И вие?
    Вообще тут надо отделить мух от котлет:
    Расчеты ИНС и ПИДов должны быть в ритме выборки датчиков, а а микшер и управление в ритме формирования ШИМ. Т.е. по готовности датчика выполняются вычисления позиционирования и ошибка от заданного положения, и это происходит ДО следующего отсчета датчиков, а миксер вычисляется от выхода ПИДов по готовности таймера к отработке следующего периода. Итого получается отставание: 1 период отсчета ДУС (F3discovery - 2.63 мсек,F4BY - 4 мсек.) , и до выхода в ШИМ 1 период таймера (т.е. от 2.5 до 20 мсек), т.е. при 400Гц ШИМ = 5(7) мсек, при 50Гц шим 23-24 мсек.
    Цитата Сообщение от SergDoc Посмотреть сообщение
    Отсюда вытекают две вещи:
    внутренние фильтры датчиков придётся отключать! дабы повысить скорость считывания и не ловить старые данные - они будут не верны
    Не понял при чем тут внутренние фильтры? Разница между внутренним и внешним только в месте размещения.
    А задержка зависит больше от частоты ШИМ, ну а далее регуль и ВМГ.

    Сегодня квадру чуть в космос не отправил , поставил новую батарею 4000мАч на 12х пропах, а настройки оставил старые мингаз 1200, средняя точка 1300. Рванул вверх, а вниз спускаться отказался. Хотел сначала ронять, пока он из радиовидимости не свалил, но потом я его большими кренами назад-вперёд снизил постепенно, а там батарея начала сдавать помалу. Дальше летал практически на нулевом газу.


  33. #2910

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Цитата Сообщение от rual Посмотреть сообщение
    Не понял при чем тут внутренние фильтры? Разница между внутренним и внешним только в месте размещения.
    А задержка зависит больше от частоты ШИМ, ну а далее регуль и ВМГ.
    Надо повысить частоту считывания, ибо смысл читать гиры на 800Гц если они выдают показания на 42Гц - и что мы будем читать старые данные? зачем? смысл от 400-490 герцового шима? если изменения вносятся 42 раза в секунду (это я из примера готовности датчиков) скажем для ПИДа хорошо сглаженные двумя фильтрами данные, но для бесплатформенной ИНС помоему не очень?

    Цитата Сообщение от rual Посмотреть сообщение
    ДУС (F3discovery - 2.63 мсек,F4BY - 4 мсек.) , и до выхода в ШИМ 1 период таймера (т.е. от 2.5 до 20 мсек), т.е. при 400Гц ШИМ = 5(7) мсек, при 50Гц шим 23-24 мсек.
    я вечно путаюсь в микро и мили - мсек-это что?

  34. #2911

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Цитата Сообщение от SergDoc Посмотреть сообщение
    Надо повысить частоту считывания, ибо смысл читать гиры на 800Гц если они выдают показания на 42Гц - и что мы будем читать старые данные? зачем? смысл от 400-490 герцового шима?
    Полностью согласен....
    Отсюда же и имею очень скептическое отношение к разного рода "крутым" регулям по I2C, там где надо и не надо.... В корень надо смотреть.. и иметь минимальный набор "инструментов" для реальной оценки эффективности отдельных узлов аппарата "снизу-вверх", а не гнаться слепо за "понтами" которые присутствуют зачастую - номинально.

  35. #2912

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    Цитата Сообщение от SergDoc Посмотреть сообщение
    Надо повысить частоту считывания, ибо смысл читать гиры на 800Гц если они выдают показания на 42Гц - и что мы будем читать старые данные? зачем?
    Кто сказал, что реальная частота дискретизации 42Гц? Я пока уверен, что СТшные ДУСы вполне адекватно отражают повороты на установленной частоте.Что касаемо МПУ, то там ещё проще, ДУС работает на 1кГц, на это дальше задается делитель отсчетов от 1 до хз (128 макс вроде), он задает частоту отсчетов акселя, ДУС на это же время осредняется. И мы получаем выход с ДУСа и акселя на одной частоте.


    Цитата Сообщение от SergDoc Посмотреть сообщение
    я вечно путаюсь в микро и мили - мсек-это что?
    м -мили
    мк -микро

  36. #2913

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    А смысла ставить ШИМ 490 Гц при обсчете инс 42Гц нет особого, ну кроме того, что при 50Гц ШИМ к 238 мсек от ИНС добавится 200 мсек от регуля. Хотя пробовал летать на 50Гц, для больших винтов и тяжелых аппаратов разницы нет, но там возможно важно иметь обратную связь по оборотам.
    Цитата Сообщение от oleg70 Посмотреть сообщение
    Отсюда же и имею очень скептическое отношение к разного рода "крутым" регулям по I2C, там где надо и не надо....
    К регулям по и2ц имею резко отрицательное отношение, а вот по КАН положительное. Хотя не то ни другое не использовал, зато хорошо знаком с особенностями первого интерфейса и возможностями второго.

  37. #2914

    Регистрация
    13.03.2011
    Адрес
    Montreal, Canada
    Возраст
    38
    Сообщений
    2,291
    Записей в дневнике
    19
    Цитата Сообщение от WETErok Посмотреть сообщение
    Для себя вынес полезного это алгоритм Particle Filter, классная вещь Калман не нужен
    спасибо, почитаю... вот нашел статейку http://habrahabr.ru/post/152553/

  38. #2915

    Регистрация
    14.02.2012
    Адрес
    Бийск
    Возраст
    37
    Сообщений
    202
    Цитата Сообщение от mahowik Посмотреть сообщение
    спасибо, почитаю... вот нашел статейку http://habrahabr.ru/post/152553/
    Если честно, когда только начал изучал информацию на русском то это статья меня запутала. Лучше оригинал https://www.udacity.com/course/viewe...330/m-48750008 там и примеры кода на питоне есть.

  39. #2916

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Лирическое отступление, немного подвис с разработкой новой платы - пока в ступоре каком-то, а может и лень?
    Но дело не в этом, есть незаконченное ПО на скажем так нулевую плату (всё что в гит)
    Негоже бросать, думаю. Так вот к чему клоню - кривой USART1 - мысли:
    Код:
    // Transmit DMA
        DMA_DeInit(DMA2_Stream7);
    		while (DMA_GetCmdStatus(DMA2_Stream7) != DISABLE) {
    			}; 
    		DMA_InitStructure.DMA_Channel = DMA_Channel_4;
        DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART1->DR;
        DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
        DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
        DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
        DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
    		DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
        DMA_Init(DMA2_Stream7, &DMA_InitStructure);
    
    DMA_SetCurrDataCounter(DMA2_Stream7, 0); // А не забыл ли я вот эту хрень?
    
        DMA_ITConfig(DMA2_Stream7, DMA_IT_TC, ENABLE);
        DMA2_Stream7->NDTR = 0;
        USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);
    
        USART_Cmd(USART1, ENABLE);

  40. #2917

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    Это базефлайт? Насчет начальной установки счетчика можно не париться, после сброса он в нуле, для спокойствия его надо было через надстроечную структуру прописать DMA_InitStruct.DMA_BufferSize = 0;.

  41. #2918

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Ну вот, вроде всё работает без костыля https://github.com/SergDoc/Nev_Multi...src/drv_uart.c затронут ещё main.c , так что требуется перекомпиляция проекта, надеюсь 100 микросекунд никого не убъёт?
    Код:
    #define UART1_TX_PIN        GPIO_Pin_9
    #define UART1_RX_PIN        GPIO_Pin_10
    #define UART1_GPIO          GPIOA
    #define UART1_TX_PINSOURCE  GPIO_PinSource9
    #define UART1_RX_PINSOURCE  GPIO_PinSource10
    
    
    #define UART1_BUFFER_SIZE   2048
    
    
    // Receive buffer, circular DMA
    volatile uint8_t rxBuffer[UART1_BUFFER_SIZE];
    uint32_t rxDMAPos = 0;
    
    
    volatile uint8_t txBuffer[UART1_BUFFER_SIZE];
    uint16_t txBufferTail = 0;
    uint16_t txBufferHead = 0;
    
    
    ///////////////////////////////////////////////////////////////////////////////
    // UART1 Transmit via DMA
    ///////////////////////////////////////////////////////////////////////////////
    
    
    static void uartTxDMA(void)
    {
        DMA2_Stream7->M0AR = (uint32_t)&txBuffer[txBufferTail];
        if (txBufferHead > txBufferTail)
        {
                DMA_SetCurrDataCounter(DMA2_Stream7, txBufferHead - txBufferTail);
                txBufferTail = txBufferHead;
        }
        else
        {
                DMA_SetCurrDataCounter(DMA2_Stream7, UART1_BUFFER_SIZE - txBufferTail);
                txBufferTail = 0;
        }
    
    
        DMA_Cmd(DMA2_Stream7, ENABLE);
    }
    
    
    ///////////////////////////////////////////////////////////////////////////////
    // UART1 TX Complete Interrupt Handler
    ///////////////////////////////////////////////////////////////////////////////
    
    
    void DMA2_Stream7_IRQHandler(void)
    {
        DMA_ClearITPendingBit(DMA2_Stream7, DMA_IT_TCIF7);
        DMA_Cmd(DMA2_Stream7, DISABLE);
    
    
        if (txBufferHead != txBufferTail)
                uartTxDMA();
    }
    
    
    ///////////////////////////////////////////////////////////////////////////////
    // Telemetry Initialization
    ///////////////////////////////////////////////////////////////////////////////
    
    
    void uartInit(uint32_t speed)
    {
        GPIO_InitTypeDef  GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        DMA_InitTypeDef   DMA_InitStructure;
        NVIC_InitTypeDef  NVIC_InitStructure;
    
    
        GPIO_StructInit(&GPIO_InitStructure);
        USART_StructInit(&USART_InitStructure);
        DMA_StructInit(&DMA_InitStructure);
    
    
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,  ENABLE);
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2,   ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
    
    
        GPIO_InitStructure.GPIO_Pin   = UART1_TX_PIN | UART1_RX_PIN;
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        //GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
    
    
        GPIO_PinAFConfig(UART1_GPIO, UART1_TX_PINSOURCE, GPIO_AF_USART1);
        GPIO_PinAFConfig(UART1_GPIO, UART1_RX_PINSOURCE, GPIO_AF_USART1);
    
    
        GPIO_Init(UART1_GPIO, &GPIO_InitStructure);
    
    
        // DMA TX Interrupt
        NVIC_InitStructure.NVIC_IRQChannel                   = DMA2_Stream7_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority        = 0;
        NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;
    
    
        NVIC_Init(&NVIC_InitStructure);
    
    
        USART_InitStructure.USART_BaudRate            = speed;
        USART_InitStructure.USART_WordLength          = USART_WordLength_8b;
        USART_InitStructure.USART_StopBits            = USART_StopBits_1;
        USART_InitStructure.USART_Parity              = USART_Parity_No;
        USART_InitStructure.USART_Mode                = USART_Mode_Rx | USART_Mode_Tx;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    
    
        USART_Init(USART1, &USART_InitStructure);
    
    
        // Receive DMA into a circular buffer
    
    
        DMA_DeInit(DMA2_Stream5);
    
    
        DMA_InitStructure.DMA_Channel            = DMA_Channel_4;
        DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART1->DR;
        DMA_InitStructure.DMA_Memory0BaseAddr    = (uint32_t)rxBuffer;
        //DMA_InitStructure.DMA_DIR                = DMA_DIR_PeripheralToMemory;
        DMA_InitStructure.DMA_BufferSize         = UART1_BUFFER_SIZE;
        //DMA_InitStructure.DMA_PeripheralInc      = DMA_PeripheralInc_Disable;
        DMA_InitStructure.DMA_MemoryInc          = DMA_MemoryInc_Enable;
        //DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
        //DMA_InitStructure.DMA_MemoryDataSize     = DMA_MemoryDataSize_Byte;
        DMA_InitStructure.DMA_Mode               = DMA_Mode_Circular;
        DMA_InitStructure.DMA_Priority           = DMA_Priority_Medium;
        //DMA_InitStructure.DMA_FIFOMode           = DMA_FIFOMode_Disable;
        //DMA_InitStructure.DMA_FIFOThreshold      = DMA_FIFOThreshold_1QuarterFull;
        //DMA_InitStructure.DMA_MemoryBurst        = DMA_MemoryBurst_Single;
        //DMA_InitStructure.DMA_PeripheralBurst    = DMA_PeripheralBurst_Single;
    
    
        DMA_Init(DMA2_Stream5, &DMA_InitStructure);
    
    
        DMA_Cmd(DMA2_Stream5, ENABLE);
    
    
        USART_DMACmd(USART1, USART_DMAReq_Rx, ENABLE);
    
    
        rxDMAPos = DMA_GetCurrDataCounter(DMA2_Stream5);
    
    
        // Transmit DMA
        DMA_DeInit(DMA2_Stream7);
    
    
        //DMA_InitStructure.DMA_Channel            = DMA_Channel_4;
        //DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART1->DR;
        DMA_InitStructure.DMA_Memory0BaseAddr    = (uint32_t)txBuffer;
        DMA_InitStructure.DMA_DIR                = DMA_DIR_MemoryToPeripheral;
        //DMA_InitStructure.DMA_BufferSize         = UART_BUFFER_SIZE;
        //DMA_InitStructure.DMA_PeripheralInc      = DMA_PeripheralInc_Disable;
        //DMA_InitStructure.DMA_MemoryInc          = DMA_MemoryInc_Enable;
        //DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
        //DMA_InitStructure.DMA_MemoryDataSize     = DMA_MemoryDataSize_Byte;
        DMA_InitStructure.DMA_Mode               = DMA_Mode_Normal;
        //DMA_InitStructure.DMA_Priority           = DMA_Priority_Medium;
        //DMA_InitStructure.DMA_FIFOMode           = DMA_FIFOMode_Disable;
        //DMA_InitStructure.DMA_FIFOThreshold      = DMA_FIFOThreshold_1QuarterFull;
        //DMA_InitStructure.DMA_MemoryBurst        = DMA_MemoryBurst_Single;
        //DMA_InitStructure.DMA_PeripheralBurst    = DMA_PeripheralBurst_Single;
    
    
        DMA_Init(DMA2_Stream7, &DMA_InitStructure);
    
    
        DMA_SetCurrDataCounter(DMA2_Stream7, 0);
    
    
        DMA_ITConfig(DMA2_Stream7, DMA_IT_TC, ENABLE);
    
    
        USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);
    
    
        USART_Cmd(USART1, ENABLE);
    }
    
    bool isUartAvailable(void)
    {
        return (DMA_GetCurrDataCounter(DMA2_Stream5) != rxDMAPos) ? true : false;
    }
    //bool isUartTransmitDMAEmpty(void)
    //		{
    //		    return txDMAEmpty;
    //		}
    
    //bool isUartTransmitEmpty(void)
    //{
    //    return (txBufferTail == txBufferHead);
    //}
    
    uint8_t uartRead(void)
    {
        uint8_t ch;
    
        ch = rxBuffer[UART1_BUFFER_SIZE - rxDMAPos];
        // go back around the buffer
        if (--rxDMAPos == 0)
            rxDMAPos = UART1_BUFFER_SIZE;
    
        return ch;
    }
    
    uint8_t uartReadPoll(void)
    {
        while (!isUartAvailable()); // wait for some bytes
        return uartRead();
    }
    
    void uartWrite( uint8_t ch)
    {
    	 // while (DMA_GetCmdStatus(DMA2_Stream7) != DISABLE) {
    		//	};
        txBuffer[txBufferHead] = ch;
    
        txBufferHead = (txBufferHead + 1) % UART1_BUFFER_SIZE;
    
    
        // if DMA wasn't enabled, fire it up
        if (!(DMA2_Stream7->CR & 1))
            uartTxDMA();
    		delayMicroseconds(100);
    }
    
    void uartPrint(char *str)
    {
        while (*str)
            uartWrite(*(str++));
    }

  42. #2919

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Кстати а вот и ошибка, почему нифига не работало:
    Код:
    DMA_InitStructure.DMA_Memory0BaseAddr    = (uint32_t)txBuffer;
    а небыло этой строки вообще

  43. #2920

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    Цитата Сообщение от SergDoc Посмотреть сообщение
    а небыло этой строки вообще
    Этож строка только для Ф4. Как она вообще со старой компилилась,? Либо у тебя альтернативная структура для Ф1 гдето в заголовках болтается.

+ Ответить в теме

Похожие темы

  1. Система стабилизации гиро+акселерометр
    от Фантомас в разделе Полеты по камере, телеметрия
    Ответов: 32
    Последнее сообщение: 25.01.2011, 14:47
  2. Продам Продам Клона Trex 450SEV2 + Аппаратура + Запчасти+ система стабилизации RTF
    от omegapraim в разделе Барахолка. Вертолеты
    Ответов: 1
    Последнее сообщение: 12.01.2011, 18:16
  3. Продам Трёхосевую систему стабилизации Turnigy V-Bar 600
    от avi@tor в разделе Барахолка. Аппаратура
    Ответов: 1
    Последнее сообщение: 08.11.2010, 13:02
  4. Продам Gaui система стабилизации GU365, дёшево.
    от avi@tor в разделе Барахолка. Вертолеты
    Ответов: 3
    Последнее сообщение: 03.08.2010, 11:13
  5. Системы стабилизации
    от max815 в разделе Фото и видеосъемка, системы стабилизации
    Ответов: 16
    Последнее сообщение: 11.03.2010, 03:14

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения