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

ABL
LeonVS:

Может попробовать на самом деле портировать 28 прошу? По словам Кости виснет она меньше 😃

Я ползовал 28 на APM (не 2). По моему, уже пора перейти с 24 к 28 - пофиксили много баг.
И почему выбросили поддержку SD? Я ползую простой combo тоже - Arduino Mega + Sensor shield + FreeIMU clone. Поддержка SD была бы очень полезна - лог.

Syberian
LeonVS:

просто закоментить установку скорости явно маловасто?

тогда выставится по умолчанию 57600

в принципе отключить ее можно.
в файле gcs_mavlink.pde закоментить все строки после 2037-й, содержащие gcs3.
например:
gcs3.update
gcs3.data_stream_send

а также строку 2095, где COMM_1 написано

Проверяй посылкой команд навигации, переключением режимов удаленно и проч. через ЮСБ.

LeonVS
Syberian:

в файле gcs_mavlink.pde закоментить все строки после 2037-й, содержащие gcs3.
например:
gcs3.update
gcs3.data_stream_send

а также строку 2095, где COMM_1 написано

Алекс, у тебя виснет как я понял постоянно, попробуй сие проделать, измениться ли что?

Хм… а вот интересно что будет, если использовать как я 115200, а потом тупо связь оборвется (выключить наземку или по дальности) то же повиснет из за переполнения буфера???

ukkr

Костя будет дрыхнуть сутки и не скажет

Всем привет. Чуть не проспал на работу. 😃

LeonVS:

По словам Кости виснет она меньше

Эм… Я не говорил, что она виснет меньше. У меня даже негде проверить, больше или меньше она виснет. На Вортекс то оно не портировано. Я только код смотрел, сравнивал с нашей 26й и нашёл много хороших вещей\баго-фиксов в 28й. Вот, цитата себя, любимого:

К стати, посмотрел я на код АрдуПилота для самолётов 28й и 26й версии. Так вот, в 28й очень много изменений по сравнению с 26й. И фиг с ним, с мавлинком. Но там изменения фундаментальней.

  1. Уход с библиотеки Wire на I2C. Это задевает всё, в том числе и работу с датчиком компаса
  2. Сам драйвер компаса AP_Compass_HMC5843.cpp кроме того, что переписан на I2C теперь ещё и сохраняет состояние последней операции( успешно или сбой) в поле healthy и умеет автоматически переинициилизироваться после сбоя:
    Код:
    bool AP_Compass_HMC5843::read()
    {
    if (!healthy) {
    if (millis() < _retry_time) {
    return false;
    }
    if (!re_initialise()) {
    _retry_time = millis() + 1000;
    return false;
    }
    }
    Кроме того, само поле healthy используется в куче разных мест автопилота для расчётов и принятия решения. К стати, то же самое и с бародатчиком.
  3. Улучшен( “причёсан”) DCM. Вынесен резет матрицы в отдельный метод, куда добавлена и разрешение обнуления оф-та компасса:
    Код:
    AP_DCM::matrix_reset(void)
    {
    if (_compass != NULL) {
    _compass->null_offsets_disable();
    }
    _dcm_matrix.a.x = 1.0f;
    _dcm_matrix.a.y = 0.0f;
    _dcm_matrix.a.z = 0.0f;
    _dcm_matrix.b.x = 0.0f;
    _dcm_matrix.b.y = 1.0f;
    _dcm_matrix.b.z = 0.0f;
    _dcm_matrix.c.x = 0.0f;
    _dcm_matrix.c.y = 0.0f;
    _dcm_matrix.c.z = 1.0f;
    _omega_I.x = 0.0f;
    _omega_I.y = 0.0f;
    _omega_I.z = 0.0f;
    if (_compass != NULL) {
    _compass->null_offsets_enable(); // This call is needed to restart the nulling
    // Otherwise the reset in the DCM matrix can mess up
    // the nulling
    }
    }
  4. Пофикшен тупой баг в FastSerial.cpp, было _txBuffer->tail = _rxBuffer->head; , а надо было _txBuffer->tail = _txBuffer->head;
  5. Вместо IMU_Oilpan появился IMU_INS с целой кучей своего барахла.
  6. Появился failsafe самого МегаПилота. Если он обнаруживает, что, что-то не то с МегаПилотом, то он начинает отсылать напрямую команды с приёмника на сервы, без своей обработки.
    7)Появился geo fencing. На сколько я вкурил( поверхностно) – позволяет вам управлять границами полёта, соответственно МегаПилот не даст пепелацу вылететь за эти границы. Соответственно весь код МегаПилота проапдейчен, чтоб учитывать этот самый geo fencing.
  7. Куча всякого другого. Где-то причесали код, где-то зафиксили баги и т.д.

Со всего этого я добавил себе уже фикс бага FastSerial. Остальное ещё не пытался интегрировать.

alex-ber
LeonVS:

Алекс, у тебя виснет как я понял постоянно, попробуй сие проделать, измениться ли что?

вечером попробую…
Пока на работе…

ukkr

Докладую. Решил поглядеть, как оно, без МАВЛИНКА с ГЦС.
Только я пошёл чутка более радикальным путём, обрамил всё, что связано с ГЦС и МАВЛИНК в #if…#endif. Плюс, застабил несколько gcs_XXXXXX функций.
Вроде как за 40 минут перезагрузок не было, хотя крутил его как бешеного. Сервы работают чётко, без сброса в 0е положение.
В Эттаче голые сырцы этого
MegaPiratePlane2.26-NO_GCSMAVLINK.zip
Застаблены
вот эти функции

#if GCSMAV_ENABLED==DISABLED
void mavlink_delay(long unsigned int){}
void gcs_send_message(ap_message){}
void gcs_data_stream_send(uint16_t, uint16_t){}
void gcs_update(){}
void gcs_send_text_P(gcs_severity, const prog_char_t*){}
#endif

Да, несколько расстроен взаимодействием МегаПирата с сервами.
Пока использовал дешёвые аналоговые С-02СТ от Пилотажа – особо не шумело, работало. Как только подрубил достаточно дорогие корейские цифровые металлические InoLab D202MG – кореец постоянно жужжит, как похотливый майский жук. 😵 Неужели МегаПират не работает с цифровыми сервами?

LeonVS
ukkr:

без МАВЛИНКА с ГЦС.

Полагаю совсем без МАВЛИНКА точки будет то же не занести в моск? Хотя если проработало без проблем, можно пошагово включать малыми порциями постараясь выявить проблемный участок…

ukkr

Ну, точки я и просто так не заносил, всё ж на коленке, тьфу на столе. Достаточно было просто врубить его и крутить и крутить… 10-15 минут давали перезагруз. Ща держит вроде.

ukkr

Разбираю AP_Mount. Блин, намутили они через ж…пу. Но, вроде, выходит каменный цветок.

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хх? Может теперь эти модификации и не дают работать с новым МишнПланером “по воздуху”?
П.С. Хочется верить, что виновата эта кривая дотнетовская поделка. Но надо выяснить истину (с). 😃