Activity
Проведи эксперимент. Плата на столе , всё по 0. Подними наклони по X Y ( не более 40 гр ) с одновременным вращение по Z ( один оборот ) и верни на стол, что будет по осям.
Если вернуть плату “на место”, то по Y и Z будут отклонения.
Я перепроверил и оказалось, что ошибки не появляется только в случае вращения по одной оси.
Если ПК наклонить ровно на 90 гр по X или Y , что выдаст софт ?
Выдаст 90 гр, как и должно быть. когда кручу по 1-2 осям - всё ОК. А когда по трем, то начинаются смещения.
Например, если плата в самолете, то держу за хвост и кручу за передний мотор по кругу. получается если не кренить, то задействованы оси x и z. И когда самолет возвращаю к начальному состоянию, все смещения показывают 0.
Но если при кручении добавить крен (ось y), то когда самолет возвращаю в начальное состояние, то по оси y будет не ноль, как должно быть, а там копится ошибка.
Так и должно быть или что-то ни так?
Пригодится для любых случаев.
Те рекомендации реально помогли, спасибо! Реализовал с кватернионами и при вращении по одной оси ошибок почти нет, а при вращении по кругу (x,y,-x,-y) появляется ошибка 3-8 градусов наверное за 8 секунд. Это нормально? И калибровку акселерометра по z не сделать внутри коптера? Стенд надо городить?насколько это критично?
Кроме того, что было Вами сказано, в ПК больше ничего не надо добавлять?
Кватернионы взял из статьи: m.habr.com/ru/post/255005/
Пропы должны быть жесткие. Я ранее потратил много времени не понимая что гибкие пропы на 11" у меня флатерят.
Думал что у меня наводки или вибрации на ПК. Он периодически резко вздрагивал по осям.
Вот я усредняю данные потому что заметил от гироскопа мощные импульсы 1-2 раза в секунду на оборотах 40%. Далее вроде учащаются случаи. И подергивается немного коптер от каждого импульса. После усреднения проблема пропала. Думал отложить решение этой проблемы, но лучше сразу найти причину.
На счет безопасности, у меня через 2 секунды ПК отключает мотор, если не получил команду с “земли”. Плавный спуск потом уж добавлю, когда выше 10см взлетит)
Стенд с шарниром - отличное решение!
Вот что значить править чужой код и не понимать основ.
Да не любитель я брать чужое. Смотрю как люди делают, пишу сам и пробую по-разному. Углы Эйлера только взял чужой код для расчета севера по магнитометру. и Всё!
Основы (статья, книга) мне на глаза не попались. Смотрел чужой код, на сырые данные и в итоге написал вот это вот… но ничего, перепишу!
Спасибо за разъяснение!
Да, моё утверждение неверное. Значит повезло, что он хоть как-то держался в нескольких см.от пола)
Тогда подходит формула: угол наклона = ug_xa - ug_xg.
ug_xa - не изменится при резком скачке, а ug_xg покажет 90 градусный скачек!
Мне бы хотелось бы параметр P увеличить… до 10 в идеале. Реально ли?
Добрый день!
ug_xg = ug_xg + xg * 0.000098; - так получаете угол наклона, что в расчете PID
ug_xg = ug_xg*0.999 + ug_xa*0.001; - добавляете немного угла по акселерометру.
0.000098 - это коэффициент преобразования данных гироскопа в градусы?
Значит, акселерометр только корректирует данные гироскопа?
Почему не так: угол наклона = ug_xa - ug_xg; вместо комп.фильтра?
И гироскоп с акселерометром можно откалибровать только по смещению нуля. Иначе нужен же точный стенд чтоб угол наклона замерять!?
Данные с гироскопа у меня очень зашумленные. Чтоб получить более-менее адекватные, мне пришлось поставить фильтр 5Hz, и ещё делаю усреднение по 4-ём значениям. Считывание поставил в прерывание с периодом 5мс. Планирую купить MPU-6050(что и в GY-86). Может он почище выдает.
В итоге: опрос 200Гц; угол наклона = ug_xa - ug_xg; P=1;D=30: ФНЧ=5Гц, усреднение 4х значений и он реально уже держится и болтается в 1-4х сантиметрах от пола. Но крутится по оси Z и из-за этого не стал параметры никакие корректировать, выше поднимать. Мне нужно в программу добавить поворот по данным гироскопа по оси Z?
Если увеличить P до 2-3 (в идеале до 10), то его уже шатать начинает. Компенсировать нужно же параметром D? Или ни как не компенсировать?
Кватернионы - тогда это уже следующий шаг после удержания.
Спасибо за советы! Надеюсь они помогут коптеру удержаться на высоте!
Добрый день! Спасибо за ответ!
Скорость гироскопа маленькая , у меня 320 раз в секунду.
- у меня 50-100, могу менять. а какая минимальная для нормальной работы? LPF используете?
Код у нас одинаковый, только: у Вас для “X”, а у меня пока для “+” схемы; “ug_xg -dx”, “oshibka_x -old_oshibka_x” у меня наоборот; в место x,y -> pitch, roll, и dt(разница по времени между чтением в секундах) наверное уберу. И “trim_x” я не понял, что это такое((
У меня начались подозрения на инерционность в ESC и на неверные показания MPU9255. Припаял светодиод, который горит при углах наклона >0 и гаснет при <0. В итоге на замедленной съемке увидел что есть небольшая ошибка. Вот как ее бы убрать!?(
Угол наклона же я правильно определяю?
#define RAD_TO_DEG (180/3.14159265)
double gyro_conv = (1000/32767); // 1000dps установленное значение у гироскопа, 32767 - вся шкала.
double gyro1 = Est_G.x*gyro_conv; //получаем смещение, dps по оси х
double ang1 = atan2(Est_A.y,Est_A.z)*RAD_TO_DEG; //получаем направление, куда направлено ускорение, в градусах
double Calc_Pitch = ang1 + (gyro1*dt); //dt - разница между считываемыми значениями, в секундах.
где:
Est_A - данные с акселерометра x,y,z в int16_t
Est_G - данные с гироскопа x,y,z в int16_t
Как бы ещё проверить правильность работы датчика положения? Как удобнее отлаживать?
Меня ещё удивляет, что обычно нигде не используют MPU9255. Обычно другие датчики. Не понятно почему…
странно. изменил где тангаж (force_Pitch), дискрет с плюса на минус, и по тангажу вроде заработало с параметрами P=1.0, D=0.1.
Тоже сделал у крена, но не прокатило(
Может и добью я этот коптер чисто своим трудом))
Добрый день!
Пишу программу для квадрокоптера. И уже совсем закопался.
Плата у меня примерно такая: github.com/fademike/Fly_MCU
моторы 1306, 4 шт. пропеллеры 5030, аккум: 2s 1000mah (но пока питаюсь от внешнего питания).
Подвесил проводом по крену, а по тангажу коптер никак не может стабилизироваться.
Когда включаю только P, коптер начинает раскачиваться (период примерно секунда), включаю D он в лучшем случае уменьшает амплитуду и тоже дико качается и среднее значение далеко от горизонтального. отключаю P и он продолжает качаться.
записал видео. P=4.0, I=0.
у видео VID_20200528_121556_conv.mp4 D=0
у видео VID_20200528_121744_conv.mp4 D=2.0 хотя тоже и при 4.0, 8.0.
github.com/fademike/Copter
Такое чувство, что часть с D неадекватно работает. Такое предположение, словно ESC слишком инерционные и меняют значение позже чем надо в данном случае (хотя они вроде шустрые. Прошивку взял тут: github.com/bitdump/BLHeli).
Гироскоп MPU9255 считываю 10-20 раз в секунду, фильтры менял на нем 40-5Гц. так визуально, по-моему гироскоп с акселерометром хорошо работают. в чем же может быть дело?
Часть кода с формулой точно нормальная и не нужно дополнений?
SET_StabKoeffCh1, SET_StabKoeffCh2, SET_StabServoMax2 - переменные, которые регулирую от 0 до 255.
dt - время в секундах после прошлого считывания
Calc_Pitch, Calc_Roll данные от MPU9255
float P = (float)SET_StabKoeffCh1/10, I=SET_StabKoeffCh2/10, D=(float)SET_StabServoMax2/10;
//float dt = 0;
static float errorPitch_was = 0;
static float errorRoll_was = 0;
float errorPitch = 0-Calc_Pitch;
static float integral_Pitch = 0;
integral_Pitch += errorPitch * I *dt;
float force_Pitch = P*errorPitch + integral_Pitch + D*((errorPitch_was-errorPitch)/dt);
force_Pitch=-force_Pitch;
static float errorRoll = 0-Calc_Roll;
static float integral_Roll = 0;
integral_Roll += errorRoll * I *dt;
float force_Roll = P*errorRoll + integral_Roll + D*((errorRoll_was-errorRoll)/dt);
force_Roll=-force_Roll;
errorPitch_was = errorPitch;
errorRoll_was = errorRoll;
int motor1 = 1000 + ((SETmainMotorValue*1000)/0xFF) - force_Roll;
int motor2 = 1000 + ((SETmainMotorValue*1000)/0xFF) - force_Pitch;
int motor3 = 1000 + ((SETmainMotorValue*1000)/0xFF) + force_Roll;
int motor4 = 1000 + ((SETmainMotorValue*1000)/0xFF) + force_Pitch;
Нет.
Можно, а лучше симметрично.А сколько весит это чудо, и каков опыт? ИМХО его просто вокруг винта крутит:-)
Разве не симметрично?) Весит 182г. Винт 6х4(поидее рассчитывал на 5х3, но их все разбил) 40г/дм2 давление на крыло. Там по ссылке более подробно с центровкой и прочее. По моему, на видео и в реале, я не заметил, что его крутит, только в самом начале, при взлете, разве что! Фото после 8и падений. Да опыт вот, только набираю…
В итоге уменьшил нагрузку на крыло до 32г/дм2, центровку сделал 23% и сделал толкающий винт, но ничего хорошего не получалось. Начал бросать вперед без электроники и понял что он плохо летает то.
И вспомнил фразу
Прежде модель нужно “научить” летать,а уж потом настраивается стабилизация (контролер) полёта.
(А как настраивается стабилизация??)
Долго обдумывал и сделал “Классическую схему” самолета с задним стабилизатором. И самолет, если бросить, вроде летит хорошо и рассекает воздух!
Добавил к ЛК стабилизатор (без киля) и он вроде тоже начал хорошо летать. Может он и не должен быть таким стабильным, как обычный самолет или стабильность полета - дело электроники? Наверное как-нибудь сделаю вжика, чтобы посмотреть, как он летает.
Вот новый самолет из картона: wingcgcalc.bruder.com.br/?unitsystem=metric&panels…
Видео, как “летает”:github.com/fademike/FLY2.0
Пытался поворачивать, а он просто переворачивается в воздухе. надо наверное уменьшить ход у сервопривода.
Кстати, можно ли вертикальное оперение сделать не вверх, а вниз? А то в инете ответа не нашел.
Так вы летать хотите или электроникой заниматься?
Я давно электроникой занимаюсь. Всегда хотелось сделать радиоуправляемый самолет, но руки не доходили. Настало время.
отличаться от автора : rc-aviation.ru/mtech/dorab/21...er-dorabotka-2
Красиво получилось!
катапульта забросит Ваш кирпич и он пролетит выше и дольше.
Хотелось бы без этого обойтись)
Хотелось бы увидеть ВАшу собственную электронику.В студию,пожалуйста.
Часть проекта на github github.com/fademike. Платы я уже объединил, а 10Dof и Si4463 потом оттрасирую, чтоб обойтись без дополнительных плат. ESC на Github-е ужасно работает. еще не отлажен. Позже займусь.
В результате хочу получить одну 2-х слойную плату, к которой подключаются моторы
P.S. 50гр (доп.груз)для дымнуть или нюхнуть? Ну не петарды ж такой истрибитель возить бу.
Хочу добавить собственную FPV. И GPS в перспективе.
Миша,ты ж всё же в москвах живёшь.Сходи на экскурсию в ближайшую моделку или в выходной на полетушки местных моделистов
Жена неочень рада моему хобби, ехать куда-то времени нет, а запускаю я самолет по пути домой в парке.
Может тебе концепцию сменить и сделать/собрать летающее средство типа коптера ?!
Потом думаю, может дойдет до этого. Пока мечтаю о самолете без вертикального взлета.
А для расчета центровки летающих крыльев есть калькулятор.
wingcgcalc.bruder.com.br/en_US/
Спасибо за полезную ссылку! То что надо!
Михаил, почитайте теорию, многие вопросы отпадут
Почитаю обязательно.
Не обижайтесь , но то что получилось у Вас , не полетит ни с какой центровкой .
Я не сдамся! Может быть Вы правы. На крайний случай, у меня есть идейка разборного крыла, которая удлинит крыло самолета в 2 раза. И есть идеи уменьшить вес. При полном провале буду делать Вжик))
Всем спасибо за внимание! Если проект удастся, то наверное результатом поделюсь и выложу в github! В любом случае, ничего я не теряю.
Всем Добрый день!
Я не новичок, а на категорию ниже. Подскажите, пожалуйста, но не судите строго!
Где-то прочел, что можно хоть на холодильник прикрепить мотор и он полетит. Загорелся идеей и решил сделать лучше, чем холодильник с пропеллером.
Решил сделать беспилотник со своей электроникой. Электронику свою сделал(пока кроме ESC), все собрал, а самолет не летает. Опыта нету в конструировании.
Почему не делал по готовым чертежам: не нашел подходящих размеров. А я хочу, чтобы самолет (кроме мотора) помещался на лист формата A4 и было удобно таскать в сумке. И чтобы можно было бы в дальнейшем ему 50г нагрузки добавить.
Мотор 1806 2400KV (70W). 2S li-po примерно 2000мач.
Вес: 255г. Тяговооруженность 0.49 с пропеллером 6x4E (125г тяга)
Тяговооруженность 0.73 с пропеллером 8040(185 тяга). Но его сильно начинает сворачивать по крену. Наверное нелегально устанавливать такой пропеллер (8040)?
Правильно или нет, но тягу я определял, взвесив самолет(мотором вверх) кухонными весами и крутанул мотор в обратную сторону, получил другую массу. Разницу считаю, что эта тяга.
В начале у меня был ЦМ установлен там где и центр давлений ЦД и у меня он просто кувыркался в воздухе падая. (После броска пролетал 2 метра и падал кувыркаясь). Потом я сместил к носу ЦМ (как на картинке) и он начал быстро падать на землю.
На скребки на элеронах не обращайте внимания, знаю что плохо получилось - переделаю на новом варианте.
Решил, что тяги не хватает и надо мотор 1806 менять на 2212. У меня есть такие с 2700KV (240W). Пойдет? Или надо купить с 1000KV? Аккумуляторы может добавлю до 3S. И думаю пропеллер установить как толкающий, но я очень не хотел бы этого делать!. Потом думаю надо ЦМ смещать к носу и может быть килевые элементы добавлю.
Делал из потолочки. Вес уменьшился на 40г, а толку никакого, только при падении о снег с 20 раза где-то он развалился. А картонный у меня очень надежный.
Вот так я подумал и решил, что может Вы посоветовали бы что-нибудь!
Вопросы такие:
- края крыла сделаны нормально или нужно сделать как-то иначе?
- ЦМ нужно ближе расположить к носу? Правильно ли на картинке изображен ЦД?
- Поможет ли другая Форма самолета?
- Поможет ли более мощный мотор?
- Киль или вертикальное это оперение обязательно добавить? Можно по краям фюзеляжа или лучше у краев крыльев? Или можно без них обойтись.
- Стоит ли установить мотор, как толкающий?
- Есть ли готовая конструкция самолета размером с формат А4 и толщиной до 3-4 см. (у меня 3 см.)
- Кстати, есть ли у кого готовый проект на Си для ESC, без кварца? В идеале на STM32F051.
