Проект Мегапират на самик!

LeonVS

Залил опять 26, полностью чистую без каких либо изменений, на холоде глюк повторился, проверил в морозе ли дело вообще, дома час проработал все тип топ… Блин, где может быть в 26 прошивке введена термостабилизация при выходе на сервы??? И нах это вообще было делать… Мое в недоумении 😦

alex-ber

Такие стасти… Простите Ребята - я был не с Вами…
Долго и упорно отстал от темы - боролся с силами Бюрократии по поводу получения помещения для клуба моделистов…
Можете меня поздравить - (скромности мне не занимать…) : сегодня, в День моего рождения я получил дозвол на шикарное помещение!
И теперь у нас есть Моделка!!! Осталось утрести юрисдические вопросы и оборудовать шикарное помещение и я сново с Вами!!!

П.С. Пробовал на болконе (за бортом - 10…) - глюков нет, проша 2.24…

LeonVS

К стати, Олег тут как то спрашивал, что еще вывести в bvHUD, при настройках и тестировании выяснилось, не плохо было бы иметь перед глазами что имеем на выходе серв, можно тупо 4 строчки где нить в углу с цифрами, а если возможно и анимацию добавить, ввиде стрелки вверх-вниз на серву РВ, и / \ для элеронов, чтоб видеть что делает АП ну а смотря на картинку видим что происходит в действительности 😃

alex-ber:

сегодня, в День моего рождения

Мои ПОЗДРАВЛЕНИЯ с днюхой и победой над силами бюрократии!!! 😉

alex-ber
LeonVS:

Мои ПОЗДРАВЛЕНИЯ с днюхой и победой над силами бюрократии!!! 😉

СПАСИБО! (раз я уже такой не скромный…) .
Леонид.
Пока с в силу известных обстоятельств, сам проверить не могу…
Попробуй на 24-й проше на мороз вынести и протестить - если будет нормально, сделай еще один тест (для успокоения моей души…) - потряси самик в горизонте (крен на право и на лево) интенсивно - у тебя горизонт с ума сходит или нет?
Просто дома (в тепле) у меня проблем нет, а при минусе за бортом - сносит горизонт…
Спасибо!
П.С. Когда закончу обустройство моделки - кину фотки!

LeonVS

😃 У нас сегодня -15 😃 Вечером бум тестить!

dundel1
LeonVS:

Мои ПОЗДРАВЛЕНИЯ с днюхой и победой над силами бюрократии!!! 😉

Присоединяюсь!😃😃

Syberian

Алекс, с денюхой 😃

Забросил ская на балкон до лета. Сел делать “повседневный” пепелац: пеновздроч типа ZAGI или Z-NUTZ размахом 1500. Начинку переставлю с грохнутого трикоптера: вортекс и хад

alex-ber
Syberian:

Начинку переставлю с грохнутого трикоптера: вортекс и хад

А что с трикоптером стало?
За поздравления - СПАСИБО!
Ну сегодня оформил все запросы и разрешения на помещение (до пятницы буду ждать ответ властей…).
За это время надеюсь тоже холодом потестировать - у нас морозы обещают до -30!!!

Syberian

шмякнулся, а пропеллеры кончились, с 24 декабря едут…

словил козу по +5В на самом интересном месте 😦
Железяке-то ничего не стало, а вот расходники кончились.

Ну и ладно, дам крылышкам последний шансЪ

LeonVS
Syberian:

дам крылышкам последний шансЪ

Олег, что скажешь по моему посту #1061, как на твой взгляд, есть смысл заморачиваться?

Syberian
LeonVS:

есть смысл заморачиваться?

про индикатор? Можно, место есть. Лучше всего было бы сделать вертикальные “столбики” относительно нуля.

LeonVS

Можно и так, но для наглядности газ и тангаж лучше сделать вертикальными а элероны горизонтальным, ну если сие возможно конечно 😃

К стати Олег, не подскажешь где может вылезать эта гадость с инвертами при отрицательных температурах в 26 прошивке???

Syberian

ума не приложу 😃 Может, надо было включить в планере отображение сервоканалов? хоть какая-то зацепка.

LeonVS:

где может вылезать эта гадость

а каналы от РЦ не меняются?

LeonVS
Syberian:

а каналы от РЦ не меняются?

Нет, меняется только реагирование на наклоны, с правильного на неправильное… В мануал режиме все в норме.

LeonVS

Нашел я траблу в 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;
}

Честно говоря не понимаю что изменяет переменные при холоде, но если закоментить изменение, глюк исчезает…

alex-ber:

у тебя горизонт с ума сходит или нет?

У нас сегодня -18, 24 не заливал, разбирался с 26, трес по всякому, с горизонтом все тип топ 😃

ukkr
LeonVS:

Нашел я траблу в 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;
}

Честно говоря не понимаю что изменяет переменные при холоде, но если закоментить изменение, глюк исчезает…

Вы немного не то нашли. То, что Вы нашли просто ставит каналу поле реверс в определённое значение, в зависимости от параметра (bool reverse), ну и возвращает текущее состояние, зареверсен канал или нет. Сам этот код понятия не имеет ни о температурных коррекциях ни о прочих высоких материях. Он просто меняет значение своей внутренней переменной в зависимости от входного параметра. Вам нужно найти другой код, который собственно говоря и дёргает этот set_reverse() с неправильным (с Вашей точки зрения) значением. Киньте ссылку на СВН, где Вы этот код взяли, если не засну раньше времени – можно покопаться.

LeonVS
ukkr:

Вы немного не то нашли.

Я же написал что не нашел что изменяет сие значения при холоде, но сей код устраняет данное явление, что для меня и являлось главной задачей 😃 Мне не надо чтоб при каких то событиях кроме настроек, сервы переходили в режим инверта, особенно в полете 😃

Ну а если найдете место где именно меняются “высокие материи”, буду вам очень признателен 😃

ukkr
LeonVS:

Ну а если найдете место где именно меняются “высокие материи”, буду вам очень признателен

Под рукой кроме Нотепада ничего нет. 8( Посмотрел на код из zipа …googlecode.com/…/MegaPiratePlane2.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).

LeonVS
ukkr:

и возвращает “термоскорректированные” показания гироскопа

Это оно и есть, и это как показывает практика работает как надо, фишка в том что в планере как я уже писал показывает все правильно, “горизонт” не куда не уплывает и тд тп, тобишь гироскоп и акселерометры работают по правильным алгоритмам, и если в них есть термокомпенсация, то она работает верно.
Описанный мной глюк влияет именно на “реверс” серв, который вылезал при охлаждении… Думаю тут больше “глюк” портирования, и какая то переменная лезет куда ей лезть не следует 😃 А вот вычислить сие место крайне проблематично, закоментив сам блок “перехода” глюк уходит, с моими познаниями аурдино вычислить, что откуда в хитрых переплетениях между основным кодом и библиотеками пирата…

LeonVS
ukkr:

Посмотрел на код

К стати если вы хороший знаток аурдино, хотелось бы пустить ваш порыв в нужном направлении 😉 Есть мысли откуда вылазит “кривая” скорость? Если посмотреть ветку выше, можно найти мной выложенные ролики полета, где скорость кажет в районе 250 😃 Но в то же время мелькает иногда и правильная… опять же где то идет перезапись нужной переменной… Есть мысли где сие может происходить?
К стати гуру, кто как отлаживает код в аурдино??? Есть какой то софт, чтоб пройтись по коду, посмотреть переменные и тд тп? А то как то в слепую все, что то закодил, а что там дальше крутится хз…

Нашел еще одно интересное место…
if (inverted_flight) nav_pitch = -nav_pitch;
Тобишь каким то образом можно врубить инверт и самуль якобы будет лететь верх тормашками, а рулиться как в обычном полете… Походу это дело и происходит, при холоде по какой то причине включается этот режим, и все рули естественно начинают работать в инверте?