Решил тряхнуть стариной и запрограммить чего нить полезное. В наше время вряд ли кто-то занимается подобным сексом, но решил выложить на git, если кому будет интересно 😃
На базе таргета MATEKF405 собрал прошивку для STM32F4DISCOVERY + GY-86. UARTs происал на свободные пины, поддержку PPM SUM приемника вернул (которую зачем то убрали пару релизов назад), LEDs прописал для STM32F4DISCOVERY. На столе проверил IMU, GPS, frsky телеметрию, PWM outputs
- to build hex use MATEKF405 target (in command line: ./build.sh MATEKF405)
- you can also find pre-builded hex file at “build/” folder: inav_4.1.0_STM32F4Discovery_GY-86_PPM_by_MATEKF405_target.hex
- if there is an issue with MPU6050 i2c init on 400KHz please make full erase -> upload inav_4.1.0_STM32F4Discovery-upload_if_mpu6050_i2c_400KHz_issue.hex first -> change i2c speed to 800 KHz at INAV Configurator -> upload inav_4.1.0_STM32F4Discovery_GY-86_PPM_by_MATEKF405_target.hex again
- see src/main/target/MATEKF405/target.h for pinout or type “resource” command at inav CLI
Всем привет!
Выкладываю проект в открытый доступ github.com/mahowik/mahowii
Работа проведена большая. Налетаны десятки часов. Спасибо всем и отдельно Артему за помощь в тестировании!
Под осень дошли руки наконец доделать игрушку 😃
Выложил новую версию на гит github.com/mahowik/BalancingWii
В продолжение темы о балансирующих роботах собрал себе новую игрушку на базе MultiWii 2.3. Конечный пид-регуль и дривер моторов пришлось поменять конечноЖ…
Пока на соплях на макетке, но оч. даже ездитЬ 😃
Так как проект уже почти забросил и что бы не пропали наработки, выложил на github в исходниках с проектом под CooCox CoIDE. Может кто подхватит. Удобно к примеру алгоритмы отрабатывать на мощном stm32F4 проце…
Это порт стабильного BaseFlight-20131126 релиза, который с фишками MultiWii 2.3. По крайней мере так писал товарисЧ Таймкоп
code.google.com/p/afrodevices/downloads/detail?nam…
Подробности тут github.com/mahowik/MahoRotorF4-Discovery
Да простят меня мечтатели данного подвеса, из чего собственно и был сделан самобалансирующий робот за один присест в воскресный вечер 😃
Давно хотелось попробовать, но планировал делать его на шаговых движках и уже было решил их заказать, как вспомнил что лежит мертвым грузом не опробованный по сути подвес + стало интересно, а получится ли “плавная” установка, в отличии от шаговиков…
Слегка модифицировал brushless-gimbal прошивку, что бы roll ось рулила обоими движками, но оставил раздельную настройку реверсов, силы и т.д. Далее чутка покумекав, что к чему прикрутить, связал пару болтиков, а на моторы надел мотки изоленты в качестве увеличения диаметра колес… Подергал пиды и опля, стоит как вкопанный! На полу правда разгоняется быстро и начинает падать 😃 Мощи двигов, явно маловато…
темка тут rcopen.com/forum/f123/topic343484
На данный момент крайняя версия Mahowii 2.4
========================================================================
Добрался вот до описания… За последний месяц было добавлено пару полезных вещей, а также сделано множество тестов. Обзавелся неплохой лого-смотрелкой (3DR modem + EZ-GUI + LiveGraph.2.0.beta01). Многие моменты стало проще понять. К примеру как ведет себя баро при вхождении в воздушную подушку. Все как на ладони теперь 😃
Прошивка была готова уже месяц назад, но все знают как лень писать доки. Собственно выродил наконец 😃
- Потратил много времени на получение мгновенной высоты по акселю. Сейчас модно называть это “предсказанием высоты”, где по сути по акселю выполняется очень быстрое и относительно точное измерение высоты при быстрых перемещениях, а инертный баро корректирует ошибку двойного интегрирования. Пипец, чеб удержать двойной интеграл, пришлось ввести динамические коэффициенты в комплиментарный фильтр…
- качество удержания высоты (альт холд - АХ) субъективно выросло в 1.5-2 раза
- дает более точную регулировку высоты, как на мелких корректировках (10-ки сантиметров), так и при изменении в несколько метров. Т.е. мгновенное определение высоты и активация висения в момент, где стик принял центр после резких подъемов/спусков. В RC1 есть лаги/задержка, т.к. высота берется по баро, где сам баро-сенсор довольно инертный…
- меньше проблем с воздушной подушкой на взлете/посадке, а также с висением в помещении где полно вихревых и отраженных потоков воздуха, т.к. баро только для корректировки акселя.
Фишки RC1:
-
Дабы не путаться с основным проектом, моя ветка по прошивкам будет MahoWii, а не MultiWii 😃
-
Новый алгоритм регулировки высоты, для режима удержания высоты (альтхолд - АХ).
Поведение управления высотой пытался скопировать с “наза”, по мотивам комментов в rcopen.com/blogs/83206/15583
По настройке: Единственное что надо сделать, это настроить значение MID для expo throttle в ГУИ. Это середина экспоненты газа, которая задает газ висения. Если расходы на аппе на газ примерно 1000…2000, то к примеру MID=0.40 в ГУИ - это 40% газа что соот-т 1400, где по умолчанию MID=0.50 и это 1500… В принципе этот шаг не обязателен, т.к. алгоритм должен учесть и скомпенсирвать этот момент (уже в полете) при первом переходе из висения к регулировке высоты. Но все же желательно для более “плавной” работы алгоритма, пока он не внес корректировку на газ висения…
Работает так:
а) центр стика газа - это АХ с деадбендом 50 (ALT_HOLD_THROTTLE_NEUTRAL_ZONE в конфиге)
б) вверх/вниз (за деадбенд) стиком задается вертикальная скорость в диапазоне примерно +/-4…5м/с
Звучит страшно наверное, но в общем то получилась довольно крутая штука! Это то, как на самом деле должна работать регулировка высоты, для режима удержания высоты.
По простому: отклонение стика задает вертикальную скорость подъема/снижения (отдельный ПД контроллер). И именно скорость, а не высоту. Это позволяет не зависеть от платформы, т.е. веса коптера, открывает путь к управляемым авто-режимам и конечно же к “правильной” автопосадке, где даже сонар уже не нужен, т.к. режим на 99% держится на акселерометре и лишь 1% - это барометр (для коррекции ошибок акселя), соот-но эффект “воздучной подушки”, чего так боялся барометр (и начинал врать на низких высотах), уже почти не ощутим. По слухам, именно по такому принципу работают крутые контроллеры, типа немцы и наза 😉
Есть нюансы пока, типа что считать центром, 50% газа или точку активации режима удержания высоты, но для начала у меня получилось отлично думаю! То что алгоритм работает правильно, говорят ПИДы подобранные с первого тычка и то в GUI 😃
Сам не облетал, т.к. до сих пор не добрался до ремонта, но народ на оф. форуме уже и видео заснял 😉
Собственно таже b2 но пофикшено несколько багов…
Ну и демонстрация возврата домой с автонабором заданной высоты (=10м сейчас прописано в конфиге) и автоснижением по прилету на точку “дом” (=3м в конфиге)…
Фишки:
- контролируемое снижение/набор высоты на новом althold’е.
Медленно увеличивает/уменьшает высоту заданную при активации аlthold-а, пропорционально отклонению стика газа от точки, в которой althold был включен. (+100 единиц газа (учтывая настройки экспоненты) дает примерно +50см в секунду. при цикле 3-4 мс… в ГУИ 3000-4000)
позаимствовал у alexmos 😃
2)предустановленное начальное значение газа для altholda будет вычислено из средней точки (MID) экспоненты газа, заданной в GUI. (т.е. значение газа не берется в момент активации холда, а высчитывается).
примечание: есть компенсация на просадку аккумулятора, т.е. к высчитанному значению газа по MID, будет добавлено значение из дефайна ниже
//#define INITIAL_THROTTLE_HOLD_FROM_MID_EXPO_POINT 40
Решил наконеЦ выложить прошивку.
По умолчанию выбраны: QUADX и CRIUS_AIO_PRO_V1
Изменения в сравнении со стоковой 2.1:
-
новый Alt Hold! Детали тут.
-
Новая фишка удержание заданной высоты при возврате домой (RTH). Наконец заработала адекватно… с адекватным алт холдом 😃 Раньше при наборе высоты с 2-х до установленных 10-ти метров, просто пролетал на 7-10 метров выше и потом уже в течении 20-30 сек возвращался на заданные 10 метров… а иногда выше на воздушных потоках вообще не хотел снижаться…
Чтобы включить ищите дефайн в конфиге:
// set altitude to RTH. If Alt-hold activated during the RTH it will keep specified altitude.
#define ALT_TO_RTH 700 // in cm... = 7m
Активируется включением альт холда при RTH, либо включением RTH при альт холде, без разницы…
У меня опять зачесались руки и накопив уже небольшой багажик знаний переписал таки алть-холд с использованием акселерометра! 😃
Результат хорош, держит ветер неплохо и компенсирует сильные пинки руками вниз-вверх, также держит высоту при пролетах (на длительных скоростных пролетах могут быть провалы до 2-3м). В среднем скачет +/-20…40см в покое (в соот-ии с точностью барометра) и до метра в пролетах.
Т.к. приходится часто писать одно и тоже, попробую начать писать факи на популярные вопросы:
- Коптер крутит по YAW. Что делать?
Что нужно проверить/настроить?
-
регули откалиброванны на одинаковый диапазон газа!
-
Аппа по yaw ~1500. Проверять в GUI вия! Находим макс. погрешность. Отводим стик в мин. положение и потом медленно возвращаемего в центр, под действием пружины в аппе, т.е. просто замедляя действие пружины. Запоминаем мин. значение (к примеру 1492). Потом проделываем тоже самое для макс. значения. Далее отводим стик на мин/макс позицию и отпускаем/отстреливаем под действием пружины аппы и также находим мин/макс значения, но они как правило меньше чем с “плавным” возвратом стика… Желательно проделать тоже самое для ролл/питч сразу, чтобы найти оптимальное значение для DEADBAND (мертвая зона стиков для полетного контроллера)…
Теперь берем макс-е отклонение от центра, добавляем 3-4 единицы и вписываем в DEADBAND в config.h
например 1500-1492+4 = 12
Как и писал тут, пока ничего нового. Улучшения из а2 добавлены в 2.0 прошивку.
Сделал только чутка резче ПИДы и немного изменил настройки НЧ фильтра акселя + поднял вес гиры в КФ.
з.ы. в 2.0 поменяли оси itg3200 гиры, потому проверьте все основательно в ГУИ.
Всем привет!
Так как тема судя по всему набрала достаточный интерес, попробую продолжить…
Имея уже не малый опыт в MultiWii рискну выложить модифицированную 1.9 прошивку, которая по идее поднимет вашу птЫчку на стоке.