High end Low cost Quatrocopter

igor_v_t
mahowik:

Здравствуйте Игорь!

Учитывая ваш опыт может поможете разобраться с сонаром для мультиви, т.к. уже месяц мучаюсь…
Возможно у вас есть наработки для “правильного” ПИД регулятора сонара. Пробовал уже много чего, полный классик ПИД регуль, PI регуль + D составляющая от оси Z акселерометра, также существующий мультивишный аль-холд ПИД регуль с переключателем баро-сонар… не летит короче и все тут, то перерегулирование то недорегулирование и т.д.

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

С ПИД регулем вопрос все еще актуален т.к. на высотах менее метра высоту не держит все равно…

наработки по сонару тут rcopen.com/blogs/83206/13482

Работе сонара по моему впечатлению может мешать писк моторов. Проблема у меня была с Турниги 2830. Заменил на новые, потом перешел на DT750 и на них проблемы не видел. МВ1260 у меня работает лучше существенно МВ1200. Поэтому может и сонары такие. Далее любая фильтрация будет вносить задержку, поэтому от нее следует отказаться по меньшей мере на первом этапе. Мой сонар если не меряет на выходе выдает максимальную высоту. Такие данные не используются, а далее если три раза не макс то считаем что хорошо.
Алгоритм
int Altitude_control_Sonar(int altitude, int target_altitude)
{
SONAR_OUTPUT_MAX = constrain(100 / (DCM_Matrix[2][2]),80,150);
static int err_altitude = 0;
int command_altitude;
int err_altitude_old;
err_altitude_old = err_altitude;
err_altitude = target_altitude - altitude;
sonar_altitude_I += (float)err_altitude*GdT_SONAR_ALTITUDE;
sonar_altitude_I = constrain(sonar_altitude_I,-100,100); //Ограничение по интегральной составляющей
sonar_altitude_D = (float)(err_altitude-err_altitude_old)/GdT_SONAR_ALTITUDE;
//изменения по ограничению диф часть ограничена отдельно
//sonar_altitude_D =constrain(sonar_altitude_D,-100,100); // New
//command_altitude = KP_SONAR_ALTITUDE*err_altitude + KI_SONAR_ALTITUDE*sonar_altitude_I ; // New
//command_altitude = constrain(command_altitude,-ALTITUDE_CONTROL_SONAR_OUTPUT_MIN,ALTITUDE_CONTROL_SONAR_OUTPUT_MAX); // New
//command_altitude = initial_throttle + command_altitude + KD_SONAR_ALTITUDE*sonar_altitude_D ; // New

//Интегральная часть добавлена с ограничением только выше
command_altitude = KP_SONAR_ALTITUDE*err_altitude + KD_SONAR_ALTITUDE*sonar_altitude_D ;
command_altitude = initial_throttle + KI_SONAR_ALTITUDE*sonar_altitude_I + constrain(command_altitude,SONAR_OUTPUT_MIN,SONAR_OUTPUT_MAX);
// Исходный код
//command_altitude = KP_SONAR_ALTITUDE*err_altitude + KI_SONAR_ALTITUDE*sonar_altitude_I + KD_SONAR_ALTITUDE*sonar_altitude_D ;
//command_altitude = initial_throttle + constrain(command_altitude,-ALTITUDE_CONTROL_SONAR_OUTPUT_MIN,ALTITUDE_CONTROL_SONAR_OUTPUT_MAX);
//Log_Write_PID(4,KP_SONAR_ALTITUDE*err_altitude,KI_SONAR_ALTITUDE*sonar_altitude_I,KD_SONAR_ALTITUDE*sonar_altitude_D,command_altitude);
return command_altitude;

Далее мои Пиды КР =0,8 КI =0,1 KD =0,7 При выдаче команды на моторы с частотой 400 (вместо 200 как у меня было вначале) КР и KD уменьшил в полтора раза. Ограничение нессиметричное в минус 40 в плюс 80 (-ALTITUDE_CONTROL_SONAR_OUTPUT_MIN,ALTITUDE_CONTROL_SONAR_OUTPUT_MAX). Принципиален исходный газ (initial_throttle)-газ висения. У меня он хранится в памяти, и корректируется в зависимости от напряжения на батарее. Точность задания ±10 мкс. Этот алгоритм из ArducopterNG.

mahowik
igor_v_t:

Работе сонара по моему впечатлению может мешать писк моторов. Проблема у меня была с Турниги 2830. Заменил на новые, потом перешел на DT750 и на них проблемы не видел.

у меня как раз турниги 2209… вот жеж! а был полностью дволен их неубиваемостью… везде есть ложка дегтя ((

igor_v_t
mahowik:

у меня как раз турниги 2209… вот жеж! а был полностью дволен их неубиваемостью… везде есть ложка дегтя ((

Вопрос не в марке,а скорее наверно в размерах. У маленьких моторов частота писка выше.

Li2n

Игорь, а сколько стоит ArduIMU+ V3 и где купить можно?
То есть , сейчас можно взять плату, залить вашу прошивку и спокойно летать?
Хотел брать кролика, но вот теперь думаю.

igor_v_t

Прочитал PDF на магнетометр 5883, дотошно прочитал. Изобразил тестовую программку для чтения в нормальном режиме и с включением положительного и отрицательного тестового поля. Ткнули осциллографом на выводы 8, 12.
Результаты таковы:
На выводах 8 , 12 с частотой приблизительно 50 Гц шлепают импульсы, которые якобы размагничивают датчик. Но при вращении ассиметрия выхода остается. Это может быть разбаланс моста, но его компенсировать как то надо. Поэтому шаманство с вращением во всех плоскостях и определение минимума и максимума остается и других идей нет пока.
Вот это тестовое поле положительное и отрицательное весьма странное, так как в этом режиме внешнее поле Земли на выход магнетометра не влияет. Выдает по всем выходам + или минус 1200-1300.
И результат.
В горизонтальной плоскости как то меряет, но при наклонах крутится на ± 50 легко. Это при том, что из DCM - матрицы углы по крену и тангажу правильные идут.
С 5843 как то летал и не задумывался, хотя траекторию полета ровной не назовешь, хотя как то не приходило в голову наклонять коптер при проверке магнетометра. И проблем особых не было, а что с этим делать? Еще проверю правильно ли знак магнетометра по вертикальной оси задан при расчетах и идеи кончились.

Li2n:

Игорь, а сколько стоит ArduIMU+ V3 и где купить можно?
То есть , сейчас можно взять плату, залить вашу прошивку и спокойно летать?
Хотел брать кролика, но вот теперь думаю.

Плата 78 ам.руб плюс доставка без трека 4. store.diydrones.com/…/kt-arduimu-30.htm
Думать надо. Потому что кроликом масса народа занимается и программка отрабатывается, а здесь первый тестовый вариант. Но если в программировании чуть понимаете, то с этой платой повозится интересно. Датчики хорошие.

Недостаток этой платы в том, что свободных выводов мало. Мало того выходы на два мотора берутся с резисторов. Для подключения датчиков есть еще пара входов чисто АЦП и один цифровой вывод. Остальное по I2C.

Себе я эту плату купил, чтобы с новыми датчиками разобраться пока АРМ 2.0 ехала.

alexmos

Я правильно понял, у вас свой отдельный форк MultiWii , скрещенный с ArduCopter? Мне кажется вы пошли не очень правильным путем, по двум причинам: одному человеку трудно будет портировать все новые фишки, которые добавляет сообщество разработчиков, и все ваши разработки также останутся недоступны сообществу, если сильно уйдете в сторону.

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

Li2n

Я так понял что это более продвинутая версия Адруины.

Dimm168pin
alexmos:

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

Таймкоп в пример) портировал multiwii на платформу stm8\32 ,уже набил оскомину)
Главное что если будет положительный эффект, доступное железо и простота софта , то сразу появится куча желающих что-то ковырять в коде ,прикручивать новые сенсоры, сонары и почее г, равно как и летчиков испытателей))

igor_v_t

Я сам занимаюсь Arducopter ом. В начале прошлого года была программа ArducopterNG к которой я дописал свой автопилот. Меня интересовал полет в автоматическом режиме. И программку потихоньку довел. Заодно разобрался как все работает. При появлении АРМ 2 решил , что мне пора переходить Arducopter 2.0

Поскольку АРМ 2 долго не ехал купил ArduIMU+ V3и начал изучать датчики. Гироскопы понравились. Они получше, чем в АРМ 1. Понадобилось попробовать влияет ли качество гироскопа на реальный полет. Для этого взял DCM матрицу и алгоритм стабилизации из проекта Арду к этому добавил обработку сигналов приемника от МультиВии и соответственно вывод на моторы из МультиВии. В результате получилась программка, которая летает. Можно было это сделать и чисто на МультиВии, но DCM матрица мне ближе. Подключать к этому дальше датчики смысла нет, так как АРМ 2 стоит $200 и существенно интереснее.

Поэтому это не проект, а просто результат работы куски из которой можно использовать. Или в целом виде, если кому нибудь такое нужно. Можно при желании переделать под железки МультиВии. Но это если кому-то нравится DCM матрица.

Алгоритм обработки датчиков и расчета управляющих сигналов взят из более серьезного проекта и вставлен в Атмегу 328.

Ну а далее попробовать сделать так , чтобы летало не хуже NAZA, но это если получится. Сейчас разбираюсь с магнетометром и барометром в АРМ 2. И если удастся написать простой алгоритм стабилизации по высоте по барометру и акселерометру, можно будет прицепить баро и летать как NAZA , но может и не получится, так как ВМР085 не подойдет по причине низкой точности, а будет ли в ближайшее время что то хорошее и дешевое непонятно. Второе - может элементарно не хватить мощности процессора для обработки.

alexmos

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

igor_v_t
alexmos:

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

Компас почти у всех 5883L. А к нему у меня вопросы.
Если взять DCM матрицу, то с нормальными датчиками при повороте коптера с допустимой угловой скоростью по любой оси матрица мгновенно выдает текущее состояние (углы по осям). С магнетометром если вращать в горизонтальной плоскости, то более менее, а по другим осям смотреть на результаты грустно. А по углу вращения вокруг вертикальной оси других данных нет. И гироскопы подстраивать не по чему.
По барометрам- ВМР085 дает большие шумы и высота, рассчитанная по баро гоняет коптер по вертикали и точного удержания не получить. Усреднение (медианный фильтр) не очень здорово, так как сигнал идет с запозданием. Полгода тому, я возился с этой проблемой , но бросил потому что в конечном итоге за 10-20 минут высота измеренная по баро уползала на 2 метра. Поэтому поставил сонар - сначала МВ 1200, а потом МВ1260 и до восьми метров от земли начал мерять с точностью до нескольких сантиметров. С появлением 5661 к этой проблеме вернулся.
Для нормального управления коптером в любой момент времени надо знать его положение.
А теперь для чего это мне.
Хочу чтобы коптер летал быстро. Сейчас он у меня летает с наклоном до 45 град. И при этом хорошо себя чувствует. Скорость пока на длинных пролетах не мерял, но на 40 метрах до 15 м/сек разгоняется легко. На более длинных участках будет больше 20 м/сек.
С быстпыми подъемами проблем ни у кого не было. Со спусками сложнее. Последнее решение линеаризовать характеристику регулятора. После этого введения на спуске раскачиваться перестал.
Далее винты у меня на коптере не останавливаются, а обычный диапазон управления таков , что это очень вероятно. В Арду ограничение по управлению наклоном ±250 мкс плюс к этому -60 на спуск. Крутизна характеристики на начальном участке регулятора в 2-3 раза ниже. При перевороте кверху ногами у меня газ тут же сбрасывается, дабы не шел на полном ходу в землю. И куча других мелочей.
Поэтому , учитывая что в Арду любые данные есть в удобном виде, мне он и понравился. И матрица за это нравится, что не надо напрягать мозги реализуя какую то очередную бредовую идею.
Существенный момент тот что в Арду пишется лог и потом если полетел не так можно выяснить почему. И здесь вывод углов вместо условных величин упрощает анализ, особенно если кувыркнулись.
Вот поэтому и взялся за эту платку и реализовал эту идею. А времени ушло на это - неделя по вечерам. И все равно это время потратил бы разбираясь с датчиками. А потом выяснить что существенно, а что не очень тоже не просто. Так по моему теперешнему пониманию - качество гироскопов больше влияет на виброустойчивость. А далее для получения эффекта от хороших гир серьезно надо возится и при желании за счет этого можно компенсировать медленные акселерометры и их шумы. И так далее.

Вот иллюстрация тех проблем которые пытаюсь решить
Лог полета 30 мая прошлого года . Погода тихо без ветра. Три пролета по маршруту на одном заряде. Маршрут - на юг от точки старта на 20 метров и два пролета по квадрату 20 на 40 метров. Далее команда возврат в точку старта. И так три раза. По шкале времени 1 соттв. 0,2 сек. Достигнув точки висим 10 сек.

Кино одного из пролетов.

Лог положения

Лог высоты


Хотелось бы чтобы коптер летал оченб резво но прямо. Направление не выдерживает из-за магнетометра. С высотой в данном случае не настроен и сильно проваливается но проблема не единственная. А так автомат полный.

alexmos
igor_v_t:

Компас почти у всех 5883L. А к нему у меня вопросы. Если взять DCM матрицу, то с нормальными датчиками при повороте коптера с допустимой угловой скоростью по любой оси матрица мгновенно выдает текущее состояние (углы по осям). С магнетометром если вращать в горизонтальной плоскости, то более менее, а по другим осям смотреть на результаты грустно

В мултиви сейчас компас работает удовлетворительно, гляньте как там сделано. Я с компасом не разбирался ещё детально, т.к. GPS пока не планирую, а удержание ориентации по YAW он выполняет с незначительным дрейфом, что не сильно страшно. На форуме multiwii.com есть тема, где человек добился существенно более высокой точности при калибровке, говорит что достаточно для GPS. Может появится в следующей прошивке.

igor_v_t:

А по углу вращения вокруг вертикальной оси других данных нет. И гироскопы подстраивать не по чему.

По другим осям он и не нужен, есть акселерометр. Компасс только для YAW.

igor_v_t:

По барометрам- ВМР085 дает большие шумы и высота, рассчитанная по баро гоняет коптер по вертикали и точного удержания не получить. Усреднение (медианный фильтр) не очень здорово, так как сигнал идет с запозданием. Полгода тому, я возился с этой проблемой , но бросил потому что в конечном итоге за 10-20 минут высота измеренная по баро уползала на 2 метра. Поэтому поставил сонар - сначала МВ 1200, а потом МВ1260 и до восьми метров от земли начал мерять с точностью до нескольких сантиметров. С появлением 5661 к этой проблеме вернулся.

Да, на прошлой неделе тоже с ним возился - выдает ужасные результаты, но у меня плавает с выключенными двигателями не так страшно, ± 0.5м. Я написал PID-регулируемый фильтр с подключением гир и акселерометра для опеределния точного ускорения, скорости и смещения по Z, а также PID-регулятор высоты. Но пока опробовать на практике не могу, только в теории + понаблюдать в GUI. Если то, что показывает GUI, правда, и оно сохранится с включенем моторов, то барометр будет работать очень неплохо, даже такой хреновый как BMP085. А с хорошим барометром и сонар не нужен. Если вкратце, то что я делаю, позволит:

  • держать высоту с любым углом наклона коптера (до 60гр.) и с любыми горизонталными ускорениями и перемещениями
  • агрессивно держать нулевую скорость (то, что так любфт демострировать, резко пихая коптер вниз. Хотя в полете такие возмущения крайне маловероятны)
  • маневрировать по высоте, не выключая режим удержания высоты.
  • автоматически подстраиваться под “уплывания” акселя по оси Z (я такого у себя не видел, но многие жалуются)

Сонар я тоже планирую пркрутить, правда недорой за 4$. (он меряет до 4 метров и довольно глючный, плохо ведет себя когда теряет сигнал - так что не знаю, будет ли от него польза). Напишите подробней по своему опыту и результатм - насколько сонар чувствителен к наклонам, к поверхности, и есть ли видео его работы на удержание высоты?

igor_v_t:

Последнее решение линеаризовать характеристику регулятора

Поясните подробней суть проблемы и ваше решение.

У вас коптер летает по программе. Программа зашита в мозги или удаленно передается? Если зашита то как обновляется? И я так понял у вас GPS? Иначе отследить положение невозможно

Вот ролик полугодичной давности от разработчика multiwii:

Так что у нее со стабилностью тоже все в порядке 😃

igor_v_t

Почитаю даташит на альтернативу ВМР085, но там может быть ньюанс со скоростью реагирования на изменение высоты. За подсказку спасибо.
По сонару - в матрице DCM [2][2] косинус углла отклонения от вертикали. На него умножается результат измерения.
Программа автопилота в памяти. Точки записываются в ЕЕРROM в виде смещения от точки старта по горизонтали и вертикали, высоты и скорости полета (чтобы не носился как угорелый).
Вот тут полетали при ветре и под дождиком. Полет сначала в полуавтомате- высота по сонару, по горизонтали держит ЖПС, а стиками изменяем точку удержания. С 45 сек пытаемся лететь в автомате. (газ в автомате 1450 мкс) При полете к первой точке коптер должен был подняться на 5 метров. Ветром его швырнуло вверх, коптер сбросил газ на -60 мкс и интегральная составляющая чего-то добавила и в результате регулятор начал работать в нелинейной области. Коптер остался цел. Один винтик пострадал. При более слабом ветре не падал, хотя раскачивался.

Магнетометр в МультиВии посмотрю и отпишусь.

igor_v_t

Оказалось увлекательное занятие 9 осей правильно взаимно расположить. В результате магнетометр начал работать с ошибкой меньше 15 град при наклонах. А при хороших гироскопах и акселерометр не очень нужен.😃

ArduIMU_V3_8.rar

mahowik
igor_v_t:

интегральная составляющая чего-то добавила и в результате регулятор начал работать в нелинейной области

takie kosyaki bivayut iz za perepolneniy peremennih… po krayney mere v multiwii v PID regulyatorah mnogo gde ispolzuetsya int16_t… potomu nado ostorozhno i vnimatel’no…

odin v odin poluchil kuvirok imenno iz-za perepolneniya peremennoy v PID regule…

igor_v_t
mahowik:

takie kosyaki bivayut iz za perepolneniy peremennih… po krayney mere v multiwii v PID regulyatorah mnogo gde ispolzuetsya int16_t… potomu nado ostorozhno i vnimatel’no…

На этом коптере стоят у меня перемотанные DT750 с 1000 об/вольт, поэтому регуляторы работают на начале характеристики (газ висения 1450). До этого с этой же электроникой летал на другом коптере , где газ висения был 1560 мкс и проблем не было. После линеаризации проблемы исчезли. К тому же поставил ограничение снизу, чтобы моторы не останавливались

alexmos
igor_v_t:

По сонару - в матрице DCM [2][2] косинус углла отклонения от вертикали. На него умножается результат измерения

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

А полет по точкам - это уже очень сложно, думаю тут десяток крашей при отладке гарантирован. Но я пока не понимаю какя польза от того что коптер научится летать по программе?

mahowik
alexmos:

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

tut da, vse pravilno… rashodyaschiysya luch… ya eto tozhe zametil, cho nakloni do ~20-ti gradusov ne vliyaut na pokazaniya sonara… + videl podobnuyu korrektirovky v arducopterNG, no po defoltu ona otkluchena vidimo po etoy zhe prichine

alexmos:

А полет по точкам - это уже очень сложно, думаю тут десяток крашей при отладке гарантирован. Но я пока не понимаю какя польза от того что коптер научится летать по программе?

dlya menya aktualen rezhim ALYARM! GO HOME! 😃
potomu GPS budu brat’ kak min dlya etogo…