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

alex-ber

Да ребята…
А у меня не сложилось… - только с работы приехал. Мозг и без того высушен!
Надеюсь завтра (верней сегодня…) будет спокойней - попробую добраться до железок…
Спокойной ночи!!!

Syberian
ukkr:

кореец постоянно жужжит, как похотливый майский жук.

Значить, серва под нагрузкой, вот и жужжит. У меня в другом проекте стоит цифровая на подсос ДВС, тоже пищит. Туда-сюда стронешь - перестает, а потом опять. Это их цифровое свойство: чуть стронешь с заданной точки - она валит мощность на полную, чтобы вернуться.
Вот если она пощелкивает туда-сюда, это другое дело, но это я пофиксил ранее.

Без мавлинка будет полная опа: ни точки прописать, ни ПИДы сконфигурять. Там 2 объекта телеметрии: gcs0 и gcs3. Соответственно, порты serial0 и serial3. Если gcs3 поудалять, то по ЮСБ управление останется, а по беспроводке уйдет. Соответственно, какая-то там нагрузка уберется и баг, скорее всего, исчезнет.

LeonVS
Syberian:

Сегодня 05:36

Олег, ты вообще спишь 😃?

ukkr
LeonVS:

Олег, ты вообще спишь ?

😆

Syberian

эээ… вообще-то у нас было пол девятого утра 😃

ukkr

Тек, у меня есть новости для тех, кого волнует камера маунт.
В принципе, удалось его завести. Оно даже работает. В смысле стабилизация подвеса камеры работает. Остальное – не тестировал, потому что МАВЛИНК у меня отрублен. К стати, с отрубленным МАВЛИНКОМ никакого перезагруза нету.
Теперь к камера маунту. Если не интересно – можете дальше не читать, ибо я начну вообще с описания aux каналов.
Итак, у АрдуПилота есть обычные каналы управления. Ну там газ, руль высоты, направления и т.д. Кроме того, у него есть вспомогательные каналы, так называемые “aux”. Вот они могут быть абсолютно разных типов. С точки зрения программиста, каналы эти вспомогательные описываются классом RC_Channel_aux, который расширяет базовый класс RC_Channel. Определение его находится в файлах RC_Channel_aux.h и RC_Channel_aux.cpp. В самом АрдуПилоте определены 4ре вспомогательных канала. Определения находятся в parameters.h:

RC_Channel_aux	rc_5;
	RC_Channel_aux	rc_6;
	RC_Channel_aux	rc_7;
	RC_Channel_aux	rc_8;

Ардупилот не знает, что скрыто за каждым их этих вспомогательных каналов.
Собственно говоря, программист сам определяет для каких дополнительных функций будет использоваться тот или иной вспомогательный канал. Список этих дополнительных функций объявлен в перечислении в RC_Channel_aux.h:

typedef enum
	{
		k_none			= 0,	// disabled
		k_manual		= 1,	// manual, just pass-thru the RC in signal
		k_flap			= 2,	// flap
		k_flap_auto		= 3,	// flap automated
		k_aileron		= 4,	// aileron
		k_flaperon		= 5,	// flaperon (flaps and aileron combined, needs two independent servos one for each wing)
		k_mount_yaw		= 6,	// mount yaw (pan)
		k_mount_pitch	= 7,	// mount pitch (tilt)
		k_mount_roll	= 8,	// mount roll
		k_mount_open	= 9,	// mount open (deploy) / close (retract)
		k_nr_aux_servo_functions // This must be the last enum value (only add new values _before_ this one)
	} Aux_servo_function_t;

Те функции, что связаны с маунтом я выделил жирным. Так вот, чтоб какой-то из вспомогательных каналов пометить для выполнения той или иной функции, надо в коде проставить у вспомогательных каналов rc_5, rc_6, rc_7, rc_8 – поле function в соответствующее значение:

AP_Int8 	function;	// 0=disabled, 1=manual, 2=flap, 3=flap auto, 4=aileron, 5=flaperon, 6=mount yaw (pan), 7=mount pitch (tilt), 8=mount roll, 9=camera trigger, 10=camera open, 11=egg drop

Процедура update_aux_servo_function() собственно уже вызывается после того, как вы поменяли какому-то вспомогательному каналу тип функции, которую он выполняет. Для привязки всего остального функционала к этим изменениям.

Идём дальше, уже к самому маунту. Итак, класс маунта содержит метод update_mount_type(). Не вдаваясь в подробности – этот метод смотрит, сколько дополнительных каналов управления включил программист для управления осями камеры. Если включены только pan и tilt-- тип подвеса k_pan_tilt. Если tilt и roll – тип подвеса k_tilt_roll. Если все – k_pan_tilt_roll. Дальше, уже при управлении маунтом АрдуПилот знает тип( количество степеней свободы) подвеса( маунта) и соответствующим этому типу образом и управляет им. В том числе, и стабилизацией.

Т.е., если вернуться к исходной проблеме, как включить Маунт, чтоб он работал – для этого надо сделать следующее:

  1. Поставить MOUNT = ENABLED. Это добавит поддержку маунта в код
  2. В удобном для Вас месте подключить дополнительные каналы на соответствующие функции камеры. Сделать это можно в разных частях кода – где вам удобнее.
    Я, когда игрался сейчас – влепил это прямо в функцию инициализации АрдуПилота:
    init_ardupilot() в файле system.pde
    Достаточно дописать в конце этой функции:

g.rc_6.function.set(6);
g.rc_7.function.set(7);
g.rc_8.function.set(8);
// и т.д.

– это эсайнит дополнительным каналам соответствующие функции (
вспоминаем:

     k_mount_yaw	= 6,	// mount yaw (pan)
		k_mount_pitch	= 7,	// mount pitch (tilt)
		k_mount_roll	= 8,	// mount roll

)

Всё, вы запустили маунт.

Вот, собственно говоря, видео моих тестов на стабилизацию подвеса:

Да, маленькая ложка дёгтя. Как видно с видео, система управляет по “PAN” Маунтом. А вот TILTом маунта она шевелить не хочет. Пока я не разобрался, чего так, может так и задумано? :wacko::blink:

Надеюсь, кому-то это будет полезно.

P.S. 2 Олег.

Значить, серва под нагрузкой, вот и жужжит… Это их цифровое свойство…

У меня как раз в TILT подключена эта цифровая серва. Чёрненькая. На видео слышно, как она “жужжит”. Нагрузки на ней никакой нету, она реально свободная. А “жужжит”… Разве это нормально? Когда втыкаю её в Футабий 2.4ГГц приёмыш – молчит, работает чётко. А вот Арду как-то не так ею “рулит”.

Syberian

Костя, ты там прячешься от кого-то? 😁 Что ни видео, то партизанщина, в полутьме при свечах 😁
Так и не понял по видео, что там жужжит.
Спасибо за исследование Mount. Пригодится, когда на 28 переходить будем.
Вспомнил, камерные сервы управляются программным ШИМ, поэтому джиттер там может появиться легко. Может, перевесить их куда-нибудь на M5…M8?

LeonVS
Syberian:

Может, перевесить их куда-нибудь на M5…M8?

Ниии, их лучше для бомболюков оставить и других вкусняшек 😃

ukkr
Syberian:

Костя, ты там прячешься от кого-то? Что ни видео, то партизанщина, в полутьме при свечах

Ну, у нас 2 ночи было. Полноценный свет включать низзззя, поскольку не все домашние с должным пониманием к этому отнесутся. Вот и приходится при свете настольной галогенки видео писать. БТВ, ЮТУБ, сука, тоже “теней” добавил. По поводу жужжания – вон тот монотонный звук всё видео – это оно и есть. Иногда, похожим образом жужжат трансформаторы на улице.

П.С. Я тут прочитал свой ночной пост – под АрдуПилотом я тут подразумеваю МегаПирата нашего. Это на тот случай, если кто-то подумал, что я роюсь в каких-то левых сырцах. 😉

LeonVS

Олег, а координированный поворот твоя разработка или это микс ардупилота? Просто работает оно не совсем правильно на мой взгляд…
Ситуация, летим прямо, самуль в горизонте, давим ручку вправо, элероны и руль высоты отрабатывают создавая крен, НО! после того как крен нужный создан элероны встают в ноль (как и должно быть) но и руль направления так же уходит в НОЛЬ, и самуль пока не дернешь руль направления перестает поворачивать а идет просто в крене 😃 На мой взгляд, чтоб неопытный пилот мог в FPWA-FPWB поворачивать просто потянув левую ручку в нужную сторону не дергая высоту и руль направления, элероны должны уходить естественно в ноль при достижении нужного крена, а вот руль направления туда уходить для поворота однако не должен 😃

LeonVS

В арду чего то намудрили, или возможно косяки подправили, в общем по беспроводной телеметрии новый планер 1.1.40 больше не цепляется…

ukkr
LeonVS:

о беспроводной телеметрии новый планер 1.1.40 больше не цепляется…

А можно подробности? В чём оно выражается? Скоростью порта игрались?

LeonVS
ukkr:

Скоростью порта игрались?

А чего ей играться если она известна 😃?
Фишка в том, что 1.1.22 лепиться без проблем, а новая версия уже кирдык, лепиться только по УСБ, по беспроводке уже усе, походу ждет какую то команду, начинает конектиться и все…

ukkr

Дык это… Для МишнПланнёра пофигу, какой реально физический интерфейс. Всё, что он видит – это COM-порт. А уже как реально он реализован (либо через переходник FTDI USB-COM, либо через полудуплексный АРС 2хх ) – МишнПланнер даже не подозревает.

LeonVS
ukkr:

МишнПланнер даже не подозревает.

Видимо все же какая то разница появилась 😃 Факты однако 😃 Ну да пофиг, разницы между 22 и 40 я не заметил, видимо внутрянку фиксят…

ukkr

Олег, а наш код МегаПирата не модифицировался в плане работы с АРС 2хх? Может теперь эти модификации и не дают работать с новым МишнПланером “по воздуху”?
П.С. Хочется верить, что виновата эта кривая дотнетовская поделка. Но надо выяснить истину (с). 😃

LeonVS

Вчера весь вечер крутил-дергал вортекс, не одного перезагруза не с включенным модулем не с выключенным. А вот при отправке команд “с земли” они происходят раз в 10-15 команд…

К стати по УСБ такая же фигня, тобишь по какому интерфасу команда попадает не важно…

ukkr:

Хочется верить, что виновата эта кривая дотнетовская поделка.

Увы но виноват все же код пирата…
Пробовал отправлять команды из “HK’s Ground Control Station - Lite Version” такая же фигня

А вот что выдает при конекте 40 планер.

Syberian
LeonVS:

а координированный поворот твоя разработка или это микс ардупилота?

ардупилота. Он мне тоже не нравится, я его отключал (ставил 0 в планере)

ukkr:

а наш код МегаПирата не модифицировался в плане работы с АРС 2хх?

24-я версия переделывалась в плане уменьшения потока, и вначале, при запросе параметров, менялась скорость выдачи не 1 параметр в 20мс, а в 100мс, иначе АРС “глотал” пакеты. Крайне раззвиздяйская реализация мавлинка в пилоте 😦 Делай что хочешь, но роди 115200 полный дуплекс!
Леонид, вероятно, полудуплекс в новой версии планера тоже не катит по той же причине. Из-за начального запроса параметров, сразу, быстро и большой кучей.

Поступление команд с земли тоже приводит к чему-то очень плохому в плане перехлеста буферов, что приводит к нарушению целостности стека и, соответственно, перезагрузке.
Слишком много наворочено библиотек и объектов. Начинаю подозревать, что “Тардуино IDE”, изначально предназначенное для “лампочкой помигать на макетке”, не было рассчитано на компиляцию такого большого проекта.
Помимо более-менее работающего g++ компилятора, код обрабатывает еще какой-то парсер на яве, чтобы вытащить глобальные переменные, расположить функции в порядке вызова и проч.
Его главный баг, до сих пор не пофиксенный - это лютая ненависть к составным названиям типов, т.е. unsigned int, static unsigned long и т.п.

Мне все менее нравится ардупилотский код в плане надежности.

Напрашивается мысль сделать “более православный” автопилот на основе пирата, переписав код чуть более, чем полностью и сделав его надежным, как танковый каток. Также уменьшить протокол на землю, чтобы укладывался в 19200 без пропусков. И, естественно, уйти от ардуино, к примеру, на codevision. Более того, прога получится быстрее и меньше в размере, т.к. автоматом зачистим ненужный HIL и другие глупости, в самолете не нужные.
По поводу прошивки платы, оставить стандартный бутлоадер от ардуино, только шить его через USB из HEX с помощью команды avrdude.
Я мог бы за это взяться, только кто возьмется за программу для виндомс? Протокол обмена согласуем, даже исходники Планнера есть на их странице.
Вообще, много чего сложного на AVR делал, даже контроллер асинхронной сети связи из 54 нодов (тоже AVR) на 8-мегабитной параллельной шине прямо на порту A. Нигде не было таких неявных галюнов, как в ардуине.

В плане написания “новой” GCS тоже вижу большой плюс: если забить на .NEТ, можн сделать такую прогу, которую можно запускать и на *NIX через вайн, и на MAC через bootcamp.

По поводу мультироторов, я уже придумал схему микширования, которая позволит одной поршивке управлять по выбору или самолем или квадриком без дефайнов и перекомпиляции.

Здесь предлагаю остановиться на 24-й прошивке или 26-й без GCS чисто для истории. Надоело “подчищать хвосты” за джейсоном. По крайней мере, буду уверен, что самолет не гробанется из-за непонятного глюка где-то в дебрях тысячи вложенных процедур.

LeonVS
Syberian:

Здесь предлагаю остановиться на 24-й прошивке или 26-й без GCS чисто для истории.

Мысль конечно здравая, но свой проект родить дело не простое и далеко не быстрое…
Вспомни как было с МАРГ, в теории то же казалось все просто, на деле же зацепили столько глюков что откатились опять на ДЦМ…
Так что предлагаю сразу не рубить сплеча, а попытаться порезать лишнее, может чего дельное все же можно будет собрать 😃

Syberian
LeonVS:

попытаться порезать лишнее

Беда в том, что резать слишком много. А как подумаешь о портировании новой версии - руки опускаются. Я не хочу больше ронять самолеты из-за чьего-то кривого кода. Пусть это будет мой собственный гыгы (шютка) 😁 по крайней мере посыпать голову пеплом буду с чистой совестью.

Короче, я уже начал. Условное обозначение MegaPirate X. Буду двигаться постепенно: IMU - RTH - миссии - geofencing - thermal search.
Заменить MARG на IMU здесь будет гораздо проще.

Кстати 115200 в ордуино выставляется с погрешностью 4%, судите сами о качестве линка.

LeonVS
Syberian:

Короче, я уже начал.

Чем планируешь пользоваться для заливки миссий смены ПИДов и тд тп?