![]() |
Специальные цены | новые товары | ![]() |
![]() |
![]() |
Тема раздела Полеты по камере, телеметрия в категории Cамолёты - Общий; Сообщение от serj на видео не ни одного прямого прохода Тестируется сейчас не плавность работы системы чтоб была хорошая картинка, ...
Т.е надо отлаживать навигацию? Для этого можно не выезжать в поле ( погода нынче не ахти) , а воспользоваться имитатором GPS.
Причем несложно реализовать его прямо в коде АП - (это всего лишь инкрементатор координат) а замкнуть ОС по координатам так- управляющее воздействие на угловую скорость курса брать с элеронов, отключив в регуляторе интегральную составляющую.
Как говорил мой коллега- разработчикам не обязательно превращаться в полярных летчиков![]()
Если подскажешь как сие реализовать был бы очень признателен
Тестировать в домашних условиях гораздо приятней чем мерзнуть в полях ;-)
К стати люди добрые, подскажите как вклячить модуль ППМ_СУМ в сие прошивку, в квадриках оно как я понял работает во всю, а в самолетах чтот застой нынче полныйОчень хотца от лишнего шмотка проводов избавиться...
В нынешней ситуации при включении данной опции сервы дергаются аки угорелые в разные стороны
Подсунул библиотеки из NG_49, большего не потребовалось
ППМ_СУМ работает
![]()
Как- подробнее- это самому уже код писать надо
Заводим 3 переменные - перемещение по долготе и широте, и симулируемый курс. скорость пускай будет фиксируемая - 20м/с, частота 2 гц. тогда длина вектора перемещения увеличивается каждый шаг на 10м.
приращение широты- косинус курса умножить на наши 10м, выраженные в градусах широты (1 градус= 111км),
приращение долготы- синус курса умножить на наши 10м, выраженные в градусах долготы (1 градус= 111км*косинус широты, для нашей местности 0.5 можно фиксированно взять.),
Курс поворачивается в пропорциональной зависимости от управляющего воздействия по крену, при заданных 40 градусах крена это буде около 23 гр/с. задан правый крен 40 градусов- переменная курса каждые 0.5с прибавляется на 11.5 градусов, левый- вычитается.
переход через 360 градусов также надо сделать. - если получившийся курс больше 360-из него вычесть 360 . если меньше 0- прибавить 360.
как-то так..
Возможно, у Тимофея или Олега это уже написано![]()
Увы, я не настолько хорошо знаю аурдино язык чтоб сие реализовать...
Тестовый модуль по идее лучше сделать отдельный, а код оставить какой есть. Сделать симуляцию всех датчиков и подрубить вместо платки "all in one", вот это был бы хороший тестовый модуль
Эх, ушел я с 24 прошивки, все внедрения перенес сегодня в 26, чтот уж больно много полтергейстов вылазить в 24![]()
Господа, кто летал на вортексе при температуре -10 и ниже? Забавный глюк вылез, стабилизация начинает работать в инвертеПриехали на поле, вынули самуль, полежал минут 10 пока на коптере летали, стали проверять перед полетом, стабилизация по крену и по тангажу отрабатывает в инверте! Что за хрень, открыл прошивку поставил в миксере "-", инвертнул в аппе эти каналы, стало нормально. Приехал домой самуль отогрелся, опять инверт! Минусы в миксере убрал, прошил, опять нормально
Вынес на балкон охладился, опять инверт
)) Забавный глюк, но если сие произойдет в полете, забавно не будет...
Есть догадки что за хня?
Ну нафиг. Летал на коптере в -15, ни намека даже на дрифт.
Дрифта и нет, и горизонт в планере отрабатывает как надо, а сервы начинают работать в другую сторону при включенной стабилизации... Именно не с пульта, а во время отклонения аппарата, начинают не устранять наклон, а его добавлять...
Может где то есть блок "термо стабилизации" который и играет злую шутку?
а можешь засечь, как этот процесс происходит, резко или плавно? Положить самоль на холоде набок и смотреть, как это начинается: все было нормально, а потом.....
Нет, если выносишь на балкон уже врубленный не чего уже не переключается... То ли платко самонагревается и ей этого хватает, либо глюк происходит только с нуля когда включаешь на холодную...
Стал вспоминать все свои изменения... единственное что менял это вклячил сериал_сум от коптеров... Вернул усе в исходную, вынес на охлаждение, минут через 10 температуры сравняются, о результатах напишу.
вернул родные библиотеки, отключил сериал_сум, результат не изменился... Правда полной очистки еще не делал...
Олег, у тебя на улице думаю то же далеко не 0Может проведешь данный эксперимент если есть балкон
? Уж очень забавный и не понятный глюк, может это только у меня, награда за работоспособность 26 прошивки
)) Чичас еще пару экспериментов и чую если не пойму в чем дело, придется уходить опять на 24... Интересно там то же самое или нет...
Последний раз редактировалось LeonVS; 29.01.2012 в 20:42.
Походу я тебя обманул... Вытащил включенным и дал хорошенько там поморозиться, и вот оно сцуко свершилось! Не с того не с сего, раз и переходим на инверт... Смотри конец лога глюк происходит на 89 проценте... Причем не перезагруза не чего нет, данные идут без перерыва! Самуль лежит вниз носом и немного с левым креном. Смотрим данные с выхода 1 и 2 канала соответственно это элероны и РВ, они пытаются компенсировать давая чутка на себя и вправо, данные 1622 по элеронам и 1657 по РВ, при наклонах все отрабатывает как надо, увеличиваем наклон вниз цифра РВ увеличивается. Оставляем на заморозку, смотрим 89% лога, данные по РВ резко становятся 1318! При наклоне вниз цифера начинает уменьшаться!!! В общем не здоровая хуня какая то
http://dpiter.info/13.rar
Залил 24, самуль ушел жить на балкон![]()
Последний раз редактировалось LeonVS; 29.01.2012 в 21:24.
То ли температура ушла из критической отметки 26 тестил при -12-14, сейчас -8, то ли в 24 такого глюка нет. В четверг обещают до -20, затестим 24 с новыми силами))
А оно и есть по сути Си. Вот с официального сайта Ардуины http://arduino.cc/en/Main/FAQСообщение от LeonVS
Дословно - язык Ардуино это набор сишных функций, которые могут быть вызваны из вашего (сишного же - прим.перев.) кода.Can I program the Arduino board in C?
In fact, you already are; the Arduino language is merely a set of C/C++ functions that can be called from your code. Your sketch undergoes minor changes (e.g. automatic generation of function prototypes) and then is passed directly to a C/C++ compiler (avr-g++). All standard C and C++ constructs supported by avr-g++ should work in Arduino. For more details, see the page on the Arduino build process.
Залил опять 26, полностью чистую без каких либо изменений, на холоде глюк повторился, проверил в морозе ли дело вообще, дома час проработал все тип топ... Блин, где может быть в 26 прошивке введена термостабилизация при выходе на сервы??? И нах это вообще было делать... Мое в недоумении![]()
Такие стасти... Простите Ребята - я был не с Вами...
Долго и упорно отстал от темы - боролся с силами Бюрократии по поводу получения помещения для клуба моделистов...
Можете меня поздравить - (скромности мне не занимать...) : сегодня, в День моего рождения я получил дозвол на шикарное помещение!
И теперь у нас есть Моделка!!! Осталось утрести юрисдические вопросы и оборудовать шикарное помещение и я сново с Вами!!!
П.С. Пробовал на болконе (за бортом - 10...) - глюков нет, проша 2.24...
К стати, Олег тут как то спрашивал, что еще вывести в bvHUD, при настройках и тестировании выяснилось, не плохо было бы иметь перед глазами что имеем на выходе серв, можно тупо 4 строчки где нить в углу с цифрами, а если возможно и анимацию добавить, ввиде стрелки вверх-вниз на серву РВ, и / \ для элеронов, чтоб видеть что делает АП ну а смотря на картинку видим что происходит в действительности
Мои ПОЗДРАВЛЕНИЯ с днюхой и победой над силами бюрократии!!! ;-)
Последний раз редактировалось LeonVS; 31.01.2012 в 00:23.
СПАСИБО! (раз я уже такой не скромный...) .
Леонид.
Пока с в силу известных обстоятельств, сам проверить не могу...
Попробуй на 24-й проше на мороз вынести и протестить - если будет нормально, сделай еще один тест (для успокоения моей души...) - потряси самик в горизонте (крен на право и на лево) интенсивно - у тебя горизонт с ума сходит или нет?
Просто дома (в тепле) у меня проблем нет, а при минусе за бортом - сносит горизонт...
Спасибо!
П.С. Когда закончу обустройство моделки - кину фотки!
У нас сегодня -15
Вечером бум тестить!
Алекс, с денюхой
Забросил ская на балкон до лета. Сел делать "повседневный" пепелац: пеновздроч типа ZAGI или Z-NUTZ размахом 1500. Начинку переставлю с грохнутого трикоптера: вортекс и хад
шмякнулся, а пропеллеры кончились, с 24 декабря едут...
словил козу по +5В на самом интересном месте
Железяке-то ничего не стало, а вот расходники кончились.
Ну и ладно, дам крылышкам последний шансЪ
Можно и так, но для наглядности газ и тангаж лучше сделать вертикальными а элероны горизонтальным, ну если сие возможно конечно
К стати Олег, не подскажешь где может вылезать эта гадость с инвертами при отрицательных температурах в 26 прошивке???
Нашел я траблу в 26 прошивке, по инверту при холоде... Хоть ее походу только я и юзаю, но все же может кому интересно:
Трабла в библиотеке "RC_Channel.cpp":
void
RC_Channel::set_reverse(bool reverse)
{
if (reverse) _reverse = -1;
else _reverse = 1;
}
bool
RC_Channel::get_reverse(void)
{
if (_reverse==-1) return 1;
else return 0;
}
Честно говоря не понимаю что изменяет переменные при холоде, но если закоментить изменение, глюк исчезает...
У нас сегодня -18, 24 не заливал, разбирался с 26, трес по всякому, с горизонтом все тип топ![]()
Вы немного не то нашли. То, что Вы нашли просто ставит каналу поле реверс в определённое значение, в зависимости от параметра (bool reverse), ну и возвращает текущее состояние, зареверсен канал или нет. Сам этот код понятия не имеет ни о температурных коррекциях ни о прочих высоких материях. Он просто меняет значение своей внутренней переменной в зависимости от входного параметра. Вам нужно найти другой код, который собственно говоря и дёргает этот set_reverse() с неправильным (с Вашей точки зрения) значением. Киньте ссылку на СВН, где Вы этот код взяли, если не засну раньше времени -- можно покопаться.
26- я версия валяется тут
http://ardupirates.googlecode.com/sv...ePlane2.26.zip
Я же написал что не нашел что изменяет сие значения при холоде, но сей код устраняет данное явление, что для меня и являлось главной задачейМне не надо чтоб при каких то событиях кроме настроек, сервы переходили в режим инверта, особенно в полете
Ну а если найдете место где именно меняются "высокие материи", буду вам очень признателен![]()
Под рукой кроме Нотепада ничего нет. 8( Посмотрел на код из zipа http://ardupirates.googlecode.com/sv...ePlane2.26.zip . Текстовым поиском найти вызов напрямую set_reverse во всём том количестве исходных файлов из-за какой-то температурной коррекции пока не удалось.
Если Вы уверены, что реверс появляется постепенно от холода, а не в связи с параметрами из конфигурации, будем рыть дальше.
Пошёл с другой стороны, надеюсь уважаемый Syberian быстрее поймёт оно это или не оно, бо нормальной иде у меня нет да и со структурой классов\алгоритмами ещё не разбирался.
Итак, в config.h есть определение такой вот константы
#ifndef HIL_MODE
#define HIL_MODE HIL_MODE_DISABLED
#endif
Шо за HIL -- не знаю, мабудь это какой-то АрдуПилотовский термин.
Дальше, в MegaPiratePlane.pde есть вот такой фрагмент кода, который объявит переменную imu как экземпляр класса AP_IMU_Oilpan (бо HIL_MODE=HIL_MODE_DISABLED):
#if HIL_MODE != HIL_MODE_ATTITUDE
#if HIL_MODE != HIL_MODE_SENSORS
// Normal
AP_IMU_Oilpan imu(&adc, Parameters::k_param_IMU_calibration);
#else
// hil imu
AP_IMU_Shim imu;
#endif
// normal dcm
AP_DCM dcm(&imu, g_gps);
#endif
Вот у этого AP_IMU_Oilpan в методе update() дёргается
/**************************************************/
// Returns the temperature compensated raw gyro value
//---------------------------------------------------
float
AP_IMU_Oilpan::_sensor_in(uint8_t channel, int adc_value)
{
float adc_in;
// get the compensated sensor value
//
adc_in = adc_value;
// adjust for sensor sign and apply calibration offset
//
if (_sensor_signs[channel] < 0) {
adc_in = _sensor_cal[channel] - adc_in;
} else {
adc_in = adc_in - _sensor_cal[channel];
}
return adc_in;
}
Так вот, метод _sensor_in() и возвращает "термоскорректированные" показания гироскопа (Returns the temperature compensated raw gyro value).
Сам этот imu вроде как дёргается из DCM в методах DCM.update_DCM() и DCM.update_DCM_fast.
В конструкторе DCM инициируется на основе imu// Constructors
AP_DCM(IMU *imu, GPS *&gps, Compass *withCompass = NULL)
Ну а сами методы DCM.update_DCM() и DCM.update_DCM_fast() дёргаются из основного MegaPiratePlane.pde на каждой итерации.
Т.е. имеем цепочку вызовов MegaPiratePlane->DCM.update_DCM()->AP_IMU_Oilpan.update()->AP_IMU_Oilpan._sensor_in().
Либо же "fast" цепочку MegaPiratePlane->DCM.update_DCM_fast()->AP_IMU_Oilpan.update()->AP_IMU_Oilpan._sensor_in().
Не суть важно, ибо обе цепочки приводят к одному методу _sensor_in(), который собственно говоря и возвращает "термоскорректированные" показания гироскопа.
Если я правильно отследил цепочку, то тут уже вопрос к уважаемому Syberian, правильно ли _sensor_in() работает. Если правильно, тогда, наверно, надо смотреть на то, откуда берутся эти "компенсационные" данные для этого метода _sensor_in() , т.е. _sensor_signs[channel] и _sensor_cal[channel]. Сил без нормальной ИДЕ разбираться в этом у меня пока нет. Нотепад всё высосал 8).
Это оно и есть, и это как показывает практика работает как надо, фишка в том что в планере как я уже писал показывает все правильно, "горизонт" не куда не уплывает и тд тп, тобишь гироскоп и акселерометры работают по правильным алгоритмам, и если в них есть термокомпенсация, то она работает верно.
Описанный мной глюк влияет именно на "реверс" серв, который вылезал при охлаждении... Думаю тут больше "глюк" портирования, и какая то переменная лезет куда ей лезть не следуетА вот вычислить сие место крайне проблематично, закоментив сам блок "перехода" глюк уходит, с моими познаниями аурдино вычислить, что откуда в хитрых переплетениях между основным кодом и библиотеками пирата...
К стати если вы хороший знаток аурдино, хотелось бы пустить ваш порыв в нужном направлении ;-) Есть мысли откуда вылазит "кривая" скорость? Если посмотреть ветку выше, можно найти мной выложенные ролики полета, где скорость кажет в районе 250Но в то же время мелькает иногда и правильная... опять же где то идет перезапись нужной переменной... Есть мысли где сие может происходить?
К стати гуру, кто как отлаживает код в аурдино??? Есть какой то софт, чтоб пройтись по коду, посмотреть переменные и тд тп? А то как то в слепую все, что то закодил, а что там дальше крутится хз...
Нашел еще одно интересное место...
if (inverted_flight) nav_pitch = -nav_pitch;
Тобишь каким то образом можно врубить инверт и самуль якобы будет лететь верх тормашками, а рулиться как в обычном полете... Походу это дело и происходит, при холоде по какой то причине включается этот режим, и все рули естественно начинают работать в инверте?
Последний раз редактировалось LeonVS; 04.02.2012 в 18:49.
Леонид, к сожалению, я не знаток Ардуино. Как и АрдуПилота\Вортекса. Для меня это всё тот же AVR с кучкой припаяных датчиков-- гироскопы, аксели и т.д. К стати, поздравьте, совратился я МегаПиратом и Вортексом, купил http://www.ebay.com/itm/260854008499...#ht_2299wt_905 Что повеселило -- прямо написано MEGA Pirate and MultiWii code compatible.
Теперь о плохом. После знакомства с ИДЕ Ардуино -- культурный шок, в худшем смысле этого слова. Единственный эпитет -- убожество. Не, я понимаю, что избалован Эклипсом, Идеей, да даже Вижуал Студией, на худой конец. Но такое... Иногда мне кажется, что банальный Notepad++ или SciTe более функционален чем ИДЕ Ардуино. Средств отладки в ИДЕ Ардуино непредусмотренно. Единственный вариант --из кода программы выводить на каждой итерации в COM-порт всю дебажную информацию, а с компа любым сериал-терминалом смотреть, хоть тем же Serial Monitor из ИДЕ Ардуино.
Короче, начал я смотреть код Пирата в ИДЕ Ардуино -- удобства не намного больше, чем с обычным Нотепадом. Будем тихонько смотреть.