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

LeonVS
ViktorDoma:

Раз движок вырубает, значит процедура посадки выполнена

Как показала практика это не совсем так, посмотрите мой лог полета… как только самуль заходит в точку координат автопосадки он выключает движок и следует куда летел поддерживая курс, нулевой крен и тангаж. А так как скай планирует очень не плохо, с метров 20-30 он крайне далеко умотает 😃
Поэтому и хочется сделать что при входе в точку автопосадки, он одновременно с выключением движка выпускал закрылки.

ViktorDoma:

закрылки могут внести дисбаланс.

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

Всех с НАСТУПАЮЩИМ!!!

LeonVS
ViktorDoma:

Отправить конкретное значение для выходных Каналов (Значение от 1000 до 2000)

Нароооодд!!! Хватит уже бухать!!! 😃 Давай те все же победим отправку определенного значения на доп каналы из процедуры автопосадки. Тестить можно используя “автовзлет”, его можно тестить дома, вызвать гораздо проще, счелкнув тумблером 😃
Моск ужо сломал, не хочет реагировать ващще никак…
Самое смешное при замене:
g.channel_throttle.servo_out = g.throttle_max;
На:
g.channel_throttle.servo_out = 0;
При включении автовзлета эта хрень все равно газует!!! Может не там копаю, в общем хрень какая то нездоровая… 😦

case MAV_CMD_NAV_TAKEOFF:
if (hold_course > -1) {
calc_nav_roll();
} else {
nav_roll = 0;
}

if (g.airspeed_enabled == true)
{
calc_nav_pitch();
if (nav_pitch < (long)takeoff_pitch) nav_pitch = (long)takeoff_pitch;
} else {
nav_pitch = (long)((float)g_gps->ground_speed / (float)g.airspeed_cruise * (float)takeoff_pitch * 0.5);
nav_pitch = constrain(nav_pitch, 500l, (long)takeoff_pitch);
}

g.channel_throttle.servo_out = g.throttle_max; //TODO: Replace with THROTTLE_TAKEOFF or other method of controlling throttle
APM_RC.OutputCh(10, 1800); // попытка победить закрылок 😃

// ******************************

break;

К стати при вклячивании сей команды в миксер, оно отрабатывает!!!

APM_RC.OutputCh(CH_1, chm_out[0]+1500); // send to Servos
APM_RC.OutputCh(CH_2, chm_out[1]+1500); // send to Servos
APM_RC.OutputCh(CH_3, chm_out[2]+g.channel_throttle.radio_min); // send to Servos
APM_RC.OutputCh(CH_4, chm_out[3]+1500); // send to Servos
APM_RC.OutputCh(CH_7, chm_out[4]+1500); // send to Servos
APM_RC.OutputCh(CH_8, chm_out[5]+1500); // send to Servos
APM_RC.OutputCh(10, 1500); // Установка сервы 8 канала в нужное положение.

Почему же тогда эта команда не пашет в функции автовзлета допустим??? Походу я чего то упускаю…

Думаю можно пойти через переменную, и в функции автопосадки присваивать ей нужное значение, отсюда вопрос, как задекларировать переменную чтоб она работала во всех “закладках” 😃?

ViktorDoma

Глобальные переменные объявляются в MegaPiratePlane.pde, но Вам это не нужно.

LeonVS:

g.channel_throttle.servo_out = g.throttle_max; //TODO: Replace with THROTTLE_TAKEOFF or other method of controlling throttle
APM_RC.OutputCh(10, 1800); // попытка победить закрылок

Команда отрабатывает, но поскольку эта команда вставлена в процедуру, которая вызызывается в сложном цикла, ее скорее всего перебивает какая то другая.
Где именно её перебивает нет смысла искать. Проще выдать команду после всех обработок и процедур.

Попробуйте следующее:

Зайдите во вкладку _MIXER.

После строк APM_RC.OutputCh(CH…) вставьте:

if(control_mode == AUTO){ // Если включен режим полета AUTO
if(command_must_ID == MAV_CMD_NAV_LAND) { // Если ВЫПОЛНЯЕТСЯ АВТО КОМАНДА ПОСАДКА
if (land_complete){ ЕСЛИ ПОСАДКА ВЫПОЛНЕНА
APM_RC.OutputCh(10, 1500); // Установить значение 8 канала в 1500
}
}
}

Можно доработать команду на 8-ю ногу с замедлением, если нужно, но тогда потребуется промежуточная переменная.

Вроде гульбища заканчиваются, скоро займёмся полётами. У нас туман и дожжжжи. Иногда выходит солнце, но сЦукко не вовремя всегда.

LeonVS

Все гениальное просто! И что я сразу об этом не подумал… Остальное дело техники, по крайней мере на режим авто уже реагирует адекватно 😃 Пошел искать как в арду языке выглядит оператор “иначе” 😃

Гы, как и в бейсике “else” 😃

LeonVS

Хм… чтот опять уперся в стену, вроде все правильно, режим авто отрабатывает как надо, а вот команды автопосадки и авто взлета не ловит… Вроде все правильно, дайте наводку 😃?

if(control_mode == AUTO){ // Если включен режим полета AUTO
switch(command_must_ID){
case MAV_CMD_NAV_TAKEOFF:
APM_RC.OutputCh(10, 1100); // Установить закрылки на взлетный режим
break;
case MAV_CMD_NAV_LAND:
APM_RC.OutputCh(10, 2000); // Установить закрылки на режим посадки
break;
default:
APM_RC.OutputCh(10, 800); // Закрылки убраны
break;
}

} else {
APM_RC.OutputCh(10, 800); // Закрылки убраны
}

LeonVS

Только с поля вернулись, ну что сказать мое довольное 😃 Код работает!!! И взлетный режим и посадочный отрабатывают отлично 😃
А дома не работало, так как ГПС спутников не видел, соответственно авторежим не активировался со всеми вытекающими 😃
В общем работает следующим образом, взлетный режим включается когда в программе задан автовзлет, автопилот врубает двиг на полную и выпускает закрылки на взлетный режим. После окончании программы автовзлета закрылки убираются. Далее выпуск закрылок на посадочный режим происходит когда самуль проходит последнюю точку маршрута (соответственно ее ставим чтоб самуль шел против ветра ну и высоту метров 10) Далее оно на холостом с закрылками пытается лезть на точку автопосадки, сегодня был ветерок 6-8 метров, самуль с закрылками почти стоял на месте 😃 когда достигает точки автопосадки отключает двиг и походу по курсу уже не управляется… держит внуле тангаж и крен ну а по курсу куда бог пошлет, у нас метров с 5 улетал метров на 50 максимум 😃 Нужен датчик бароскорости, при этом было бы управление тангажом, садился бы думаю вообще на пяточок 😃
В общем кто хочет активировать закрылки надо вставить вот этот код в закладку “_MIXER” как посоветовал Виктор после строк:
APM_RC.OutputCh(CH…)

if(control_mode == AUTO){ // Если включен режим полета AUTO
switch(command_must_ID){
case MAV_CMD_NAV_TAKEOFF:
APM_RC.OutputCh(10, 1200); // Установить закрылки на взлетный режим
break;
case MAV_CMD_NAV_LAND:
APM_RC.OutputCh(10, 2000); // Установить закрылки на режим посадки
break;
default:
APM_RC.OutputCh(10, 950); // Закрылки убраны
break;
}

} else {
APM_RC.OutputCh(10, 950); // Закрылки убраны
}

Данный код 2 раза пролетел по точкам в полной автономке с авто взлетом и автопосадкой, так что вполне жизнеспособен 😃
Циферы соответственно подобрать свои для нужного положения закрылок. Закрылки висят на 8 канале у вортекса.

Походу все бухают, а я тихо сам с собой веду беседу 😁

Syberian

Леонид и Виктор, спасибо за закрылки 😃 Я молчал, т.к. умного сказать было нечего.

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

Ну, еще есть вариант включить как субканал в сам миксер. Чтобы “бабочку” делать можно было.

LeonVS
Syberian:

Чтобы “бабочку” делать можно было.

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

Syberian

Проект обновлен. Пока просто причесал. В миксере надо тестировать сначала.

ViktorDoma

Леонид, рад что у Вас заработало.
Я, пля, никак не доберусь до кода, к компу урывками прорываюсь.
И это при всем при том что я ВАЩЕ не бухаю.

LeonVS

Народ, Е-ОСД кто нить пробовал от 4 банок питать? В доках 2-3… Погорит, аль есть шанс что будет пахать?

ViktorDoma

Шансы довольно велики. 50/50 или по простому 1 к 2-м 😃

Или сгорит или будет работать.

Я сегодня получил с Е-БЭЯ стэпАПстэпДАУН регулируемы. Сегодня проведу эксперимент, на предмет стабилизированных 12В под видео-передатчик.

Ценник 300-400 рублей.

LeonVS

Вспоминается анекдот про женскую логику 😃))))
Что за спепдаун еще такой, заделись сцилкой 😃?

Syberian

от 4 банок еосд будет работать, а вот вортексу п…да придет от перегрева.

Я вот вортекс от еска запитал, все меньше греться будет.
А для высоковольтных применений хорошо работает turnigy ubec HV 7A. С него можно и 12 снимать, подкрутив встроенный делитель. Работает до 42В проверено.

LeonVS

Вортекс у меня от ДСДС питается 😃 ЕОСД точно будет пахать? Просто встала дилема как подрубить, так же через ДСДС, но тогда не будет видна реальная напруга, или напрямую, но боюсь что не выдержит…

LeonVS

Упс… Олег, чего то из него волшебный дым пошел 😁
Щутка 😃 Все пашет на ура, спасиб!

Олег, прошивка ЕОСД менялась с тех давних пор? У меня координаты ГПС опять замазаны…

ViktorDoma
LeonVS:

Что за спепдаун еще такой, заделись сцилкой

DC-DC Converter Buck Boost Step-Up Step-Down Module In 3-35V Out 1.25-30V

www.ebay.com/itm/270859180499

покупал 14-го декабря - получил сегодня

бесплатная доставка

LeonVS

Хм… и ток 2А, не плохо, то же чтоль заказать, штука нужная, у нас такие стоят совсем не гуманных денег 😃

Вопрос кто юзает ЕОСД, у меня прошивка от 28.08.2011, вроде последняя выложенная у Олега, у кого еще мажет координаты ГПС? Или опять я один такой счастливый…

Syberian

Спокойно. ща усе будет нормально.

Как обещал:
добавлена индикация выпущения? выпущания? тьфу… закрылков. Мигающая F в статусе на взлете, постоянно горит на посадке. Это если закрылки были вообще разрешены.
Также пофиксено отбражение GPS-координат в еосд.
ОСД и пират 2.24 обновлены.
ardupirates.googlecode.com/…/MegaPirateOSD.zip
…googlecode.com/…/MegaPiratePlane2.24.zip