ArduCopter Mega: порт на обычную Arduino (тестим)

SovGVD
ligor73:

попробовал подключил камеру

сколько строк камера? у меня 420 строк и вижу не всё, да и сам горизонт смещен вниз
переключение режимов показывает? по идее надо всего лишь в коде OSD поменять их названия и будет вообще идеально

Sir_Alex:

Подумай, что будет если Гира может увидеть максимальный наклон 30гр (при 250Гц, для примера), а мы повернули на 45гр, а потом на 30 назад… в итоге гира скажет 0, а на самом деле 15гр!

а нам надо так сильно коптер крутить? ну кроме акро режима и при попытках поиграться в аса пилотирования
у меня такой же косяк был с гирой L3G4200D, даже еще сильнее (там градусов под 90 и больше было при резком вращении платки, грешил на переполнение), но вполне хорошо летал блинчиком

Sir_Alex
SovGVD:

а нам надо так сильно коптер крутить? ну кроме акро режима и при попытках поиграться в аса пилотирования у меня такой же косяк был с гирой L3G4200D, даже еще сильнее (там градусов под 90 и больше было при резком вращении платки, грешил на переполнение), но вполне хорошо летал блинчиком

Хз, но я предпочитаю отладить полностью работу с датчиками (сонар, баро, гира, аксель) - что бы потом не думать, а где порылась собака и почему коптер так колбасит или падает или…

Musgravehill

Хитро, однако:

arducopter.pde-> readAHRS() -> AP_DCM::update_DCM_fast -> delta_t = _imu->get_delta_time(); ->AP_ADC_ADS7844::Ch6( return 1000; // Gyro sample rate 1kHz)

arducopter.pde -> readAHRS() -> AP_DCM::update_DCM_fast -> matrix_update(delta_t);

-----
Кто объяснит математику??
itg3200.init
i2c_write(0x15); // register Sample Rate Divider
i2c_write(0x 4); // 1000/ 4+1 = 250 Hz ??? 1000/5 = 200Гц

-----
APM_DCM.cpp accel_weight = 0.0; И работает только гира. Явно видно, что быстрые повороты она “прозевала”. Доводка шла только за счет акселя!

mahowik
Sir_Alex:

Если +5-5… то нам пофигу, т.к. коптер вернулся обратно и нам не важно, что его чуток поштормило! Про эту ситуацию речи нет!
Подумай, что будет если Гира может увидеть максимальный наклон 30гр (при 250Гц, для примера), а мы повернули на 45гр, а потом на 30 назад… в итоге гира скажет 0, а на самом деле 15гр!

tirrrrrrrrrr… prrrrrr 😃
postoyteka! o chem mi tut rassujdaem?! gira to otdaet uglovie skorosti a ne ugi !!!
t.e. poluchaetsya chto usrednyatsya budet skorost a ne ugol… %)

P.s. t.e. esli prinimat skorost postoyannoy v kvant vremeni (vremya iteracii bistrogo cicla) togda mogno i skorost usrednyat. No esli schitat chto v etot kvant ona takje ne postoyanna, to usrednenie ne katit…

ligor73

сколько строк камера? у меня 420 строк и вижу не всё, да и сам горизонт смещен вниз
переключение режимов показывает? по идее надо всего лишь в коде OSD поменять их названия и будет вообще идеально

Брал такую BEV OSC 480-PAL вроде 480,показывает ровненько. Режимы показывает, но перепутаны надо поискать в коде.

Sir_Alex
mahowik:

postoyteka! o chem mi tut rassujdaem?! gira to otdaet uglovie skorosti a ne ugi !!! t.e. poluchaetsya chto usrednyatsya budet skorost a ne ugol… %)

Разумеется, имеется ввиду не просто угол, а скорость, например 60гр/с

Musgravehill:

i2c_write(0x4); // 1000/ 4+1 = 250 Hz ??? 1000/5 = 200Гц

Опа, еще одна ошибочка в коде походу. Значит и dt надо было отдавать не 4000, а 5000… (200Гц = 5мкс)

Musgravehill
Sir_Alex:

Значит и dt надо было отдавать не 4000, а 5000… (200Гц = 5мкс)

Может, лучше i2c_write(0x3); // 1000 / 1+3 = 250Hz
И оставить время цикла 4мс?

Или специально цикл 250Гц, а гира 200Гц, чтобы гарантировано успеть за ней?

Sir_Alex
Musgravehill:

Или специально цикл 250Гц, а гира 200Гц, чтобы гарантировано успеть за ней?

Логики выбора частоты я не знаю. Попробовал 250Гц, стало получше, но не намного… надо 500 или килогерц.

Вру, стало значительно лучше!

Musgravehill
Sir_Alex:

Попробовал 250Гц, стало получше, но не намного… надо 500 или килогерц.

Вру, стало значительно лучше!

Сделал 333 Гц super_fast_loop. ITG3200 LPF=20Hz, Fi = 1 000Hz. Sample Rate = 1 000/ (2+1) = 333 Hz
А fast_loopTimer >= 5000 т.е. 200Гц


if ((timer - super_fast_loopTimer) >= 3300)
{
		G_Dt 				= (float)(timer - super_fast_loopTimer) / 1000000.f;		// used by PI Loops
		super_fast_loopTimer 		= timer;
		super_fast_loop();
}

super_fast_loop()
{
     readAHRS();   //только в супер_быстром цикле! Из fast_loop убрал!
}

Адекватно работает! Дрейф гироскопа по оси менее градуса в минуту.

-----------------------------------
readAHRS(); занимает 3200 мкс = 3.2 мс

SovGVD
ligor73:

Режимы показывает, но перепутаны надо поискать в коде.

в mpo.c

switch(pak_buf0[7])
        {case 0: print(30,"MANUAL");break;
         case 1: print(30,"CIRCLE");break;
        case 2: print(30,"STABILIZE");break;
        case 5: print(30,"WIRE A");break;
        case 6: print(30,"WIRE B");break;
        case 10: print(30,"AUTOPILOT");break;
        case 11: print(30,"RETURN");break;
        case 12: print(30,"HOLD");break;
        case 13: print(30,"TAKEOFF");break;
        case 14: print(30,"LANDING");break;
        default: print(30,"UNKNOWN");break;

        }

должно быть для коптера (по идее)

switch(pak_buf0[7])
        {case 0: print(30,"STABILIZE");break;
         case 1: print(30,"ACRO");break;
        case 2: print(30,"ALT_HOLD");break;
        case 3: print(30,"AUTO");break;
        case 4: print(30,"GUIDED");break;
        case 5: print(30,"LOITER");break;
        case 6: print(30,"RLT");break;
        case 7: print(30,"CIRCLE");break;
        default: print(30,"UNKNOWN");break;

        }

тогда всё будет работать как надо

Sir_Alex
Musgravehill:

Адекватно работает!

Не совсем понял, зачем DCM обновлять на этой частоте? Оригинальный код AC, просто усредняет (т.е. сумма/кол-во считываний) показания гиры между вызовами DCM. Думаю, нам можно так же поступить 😃
Кстати, я еще задействовал INT_Baro… это так же нам может дать дополнительные микросекунды 😃

Musgravehill
Sir_Alex:

Не совсем понял, зачем DCM обновлять на этой частоте?

Я не знаю, как отправить суммарный угол в DCM и учесть G_dt super_fast_cycle (

Может, в super_fast_cycle считать гиру new_gyro_vector и Gdt, а в f ast_cycle вызывать readAHRS(new_gyro_vector, Gdt); ?

Хочется аналоговые гиры, чтобы быстро считывать. Или отдельную ардуинку выделить под AHRS. Пусть возвращает вектор XYZ =)

Sir_Alex
Musgravehill:

Хочется аналоговые гиры, чтобы быстро считывать. Или отдельную ардуинку выделить под AHRS.

Дык это уже получается оригинальный ArduCopter OilPan 😃

Musgravehill:

Я не знаю, как отправить суммарный угол в DCM и учесть G_dt super_fast_cycle

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

alexeykozin

Подскажите пожалуйста новичку в чем концепция группы ардупираты?
У офф. ардукоптеров защита от чужих плат?
Другой процессор?

Covax

Ардупираты это группа товарищей, которая пишет альтернативную прошивку и наземную станцию на железо ардукоптера, не более того. У мегапиратов еще и альтернативное железо (только датчики другие, процессор тот же), а код портированный с оригинального ардукоптера, но с дополнениями, изменениями. Кстати, видел ваши платки ардупилота, очень интересно, ардукоптер не собираетесь воспроизвести таким же способом (защиты там никакой нет, это чистый опенсорс)? а то все альтернативное железо делает, а оригинал не поспроизводит никто кроме одного китайца, посылка от которого идет месяц-полтора…

Sir_Alex
alexeykozin:

одскажите пожалуйста новичку в чем концепция группы ардупираты?

Если вы про команду, которая тут тусуется, то цель у нас простая: Адаптировать прошивку ArduCopter под наше железо, в частности платы датчиков AllInOne и FreeIMU (ну и сонар)

nemo61

Решил попробовать MegaPirateNG.2.0.44
При настройке режимов полета в GUI выбираю ALT_HOLD и STABILIZE.
При этом при переключении в консоли вижу AUTO и STABILIZE. Теперь настраиваю через консоль ALT_HOLD и STABILIZE.
В GUI получаю SIMPLE и STABILIZE. Чему верить… В полете еще не проверял.

alexeykozin

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

Sir_Alex
nemo61:

Решил попробовать MegaPirateNG.2.0.44 При настройке режимов полета в GUI выбираю ALT_HOLD и STABILIZE. При этом при переключении в консоли вижу AUTO и STABILIZE. Теперь настраиваю через консоль ALT_HOLD и STABILIZE. В GUI получаю SIMPLE и STABILIZE. Чему верить… В полете еще не проверял

Планер у вас какой версии?

nemo61
Sir_Alex:

Планер у вас какой версии?

1.0.54
1.0.68 у меня не запускается.

tusik
nemo61:

1.0.54

Надо бы 1.0.74. Чтобы запускался, надо установить НетФрамеворк версии 3,5

Sir_Alex:

Примечание 5 - Планер надо использовать последний (1.0.74)

Пост 2883