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

alex-ber

Леонид.
Пока я боролся с бюрократами и т.д., вы (вместе с Колей) шагнули далеко вперед!
Ты так вообще (судя по роликам) по полной Вортекс пользуешь, и авторежим уже освоен (кстати - включение флапов в авторежиме впечатлило!!!) и примочки в код добавляешь… Молодец!
Теперь просьба (чтоб быстрее нагнать…) - так как я совсем не програмист, то мог бы ты коментировать свои изыскания по типу - вот это сюда добавим= получим тото и тото…
И еще - ты с настройками ПИДов игрался или на дефолтных летаешь? если менял, то какие и как?
Спасибо!!!

ukkr

Так-с, аксакалы. По порядку. Спасибо, что вы вспомнили, что на M-ках + питалова не подаётся в Вортексах. Именно из-за этого все сервы стояли как вкопанные. Начал прозванивать – “-” у всех М-ок общий, соединён со всеми минусами на плате. А вот “+” – нет. Самое интересное, у М1 и М2 “+” запараллелен. Но к даже там оно не подключено к общим +5В. Короче, я просто прифигел с этого. Если бы вы не вспомнили – чёрта с 2 так быстро разобрался б. Пришлось с обратной стороны платы припоем “ссопливить” все “+” М-ок. Ну и свободной М-ки канал “+” бросить на +5В выход справа. И всё стало шоколадно. Вот бы где фак такой замутить, чтоб такие “ньюансы” складировать.
Второй ньюанс, из-за которого я чуть не растоптал ногой Вортекс – несоответствие номера канала номеру “М-ки”. Т.е., я думал, что g.rc_6 будет выводиться на М6. Не тут-то было. Пришлось взять 9й канал по твоей наводке, Леонид. Бо там ты чётко написал какой оно М-ке соответствует:

Дрыгает выходом М7

. Сразу обрадовало:

Слушайте, а есть где-то линка на документ или текст, чтоб не путаться какому номеру канала какая М-ка соответствует? Ну не писать же 8 прошивок с перетыками сервы для поиска где-чего?

LeonVS
ukkr:

несоответствие номера канала номеру “М-ки”

Не забываем что сие дело портировано с ардупилота, а у них распиновка “слегка” другая 😃
По каналам отнимаем 2 и получаем номер канала, тобишь OutputCh(9, xxx_pos); 9 - 2 = М7 😃

Разобрался как подключить датчик скорости 😃
store.diydrones.com/ProductDetails.asp?ProductCode…
В закладке “sensors” требуется заменить:
(float)adc.Ch(AIRSPEED_CH) - (у вортекса данный вход походу отсутствует как таковой…)
на
analogRead(BATTERY_PIN2)
Датчик при этом цепляем на 2 аналоговый вход вортекса, проверить в полете пока увы не могу, датчик ко мне только еще едет… Но в теории все должно работать, на стенде меняя напругу на аналоговом входе воздушная скорость меняется 😃

LeonVS:

отнимаем 2 и получаем номер канала

Правда на данный момент устойчиво работают только М7 и М8.
С М5 и М6 надо искать в коде глюк, серва дергается как угорелая…

alex-ber:

игрался или на дефолтных летаешь?

Конечно игрался как без этого, и еще чую надо играться, по высоте есть нарекания… слишком он шустро ныряет, надо угол пикирования уменьшать…
Завтра могу скинуть скин с моими пидами 😃 Только вот у тебя вроде Алекс 24 прошивка, пиды отличаются…
К стати Кость, у тебя 26 виснет??? чтот все жалуются на нее, хотя у меня она гораздо стабильней и уверенней летает нежели 24…

alex-ber:

Теперь просьба (чтоб быстрее нагнать…) - так как я совсем не програмист,

Да я в общем то то же кроме бейсика не чего и не крутил 😃 Так по наитию, ну и с подсказками Кости 😃 поэтому с объяснениями туго… но попробовать можно, так что если что спрашивай 😃

ukkr
LeonVS:

В закладке “sensors” требуется заменить:
(float)adc.Ch(AIRSPEED_CH) - (у вортекса данный вход походу отсутствует как таковой…)
на
analogRead(BATTERY_PIN2)

Дело в том, что AP_ADC_ADS7844 (а это и есть adc) у нас на Вортексе вообще нету. Соответственно код, который его юзает – ничего хорошего от него не получит. У нас есть стандартные 5 пинов, которые идут прямо на вход ADC нашего центрального проца Mega2560. С помощью функции analogRead() вы можете читать значения с любого из этих входов в любом месте. На самом деле – Mega2560 пофигу, что подключено на эти пины, оно просто оцифровывает тот сигнал, что вы подаёте на пин. Это может быть как термометр, так и барометр, который выдаёт аналоговый сигнал и т.д.
К стати, по поводу вашего датчика store.diydrones.com/ProductDetails.asp?ProductCode… – готовьтесь, вам надо будет распотрошить его серво-кабель – провод сигнала бросить на любой из аналоговых входов, хоть на тот же BATTERY_PIN2, а вот + и - бросить на +5В и - соответственно.

К стати Кость, у тебя 26 виснет???

– в принципе, я с ней не летал, только застольные испытания. Работает стабильно. По крайней мере 10 минут пока я не шью новую прошивку 😃. Обнаружил интересный глюк – если у меня подключен к компу Вортекс, и в это время в другой ЮСБи порт я вставляю флешку, то Вортекс перезагружается. С чем этот полтергейст связан – ума не приложу.

LeonVS
ukkr:

С помощью функции analogRead() вы можете читать значения с любого из этих входов

Ну в общем то это я и предлагаю, подсунув значение с 2 входа вместо AP_ADC_ADS7844 😃

ukkr:

готовьтесь, вам надо будет распотрошить

Ну это само собой 😃

ukkr:

– в принципе, я с ней не летал, только застольные испытания.

У всех кроме меня оно и на столе висло… Полагаю зависон вызывался не закоментированными строчками считывающими в ардупилоте микрики… Что вызвало у меня реверсы каналов…
Алекс, ты эти строчки закоментил?

Syberian
LeonVS:

По каналам отнимаем 2 и получаем номер канала, тобишь OutputCh(9, xxx_pos); 9 - 2 = М7

Совсем не так.
Номер канала (число, а не СН_х) - Мх
0 - М3
1 - М4
2 - М1
3 - М2
4 - PAN
5 - TILT
6 - M5
7 - M6

9 - M7
10- M8

alex-ber

Леонид.
Спасибо за согласие помочь с настройками.
вообще у меня 26 проша глючила, поэтому откатился (особо не разбираясь) на 24-ю…
впрочем сейчас нелетная погода у нас да и времени на полеты пока нет - поэтому завтра постараюсь прошиться вновь на 26-ю и еще раз попробовать с ней поработать (кстати может ты мне кинешь ссылку на 26, которая у тебя залита - может у меня при скачке-заливке что-то не так пошло? просто с СС такая шняга была - скачал прошивку на бук, прошился - не работает… по-новой скачал - прошил - все работает… даже не знаю - система дурит или прошивка…).
Костя.
Класс! сразу вопрос ребром - а можно отправить эти команды на выходы управления камерой (точно не помню - плата в самике а искать фотку долго… Но вроде пан и титл называются (между входами и М-ками расположены…) ) и интервал в крайних положениях задать функцией (вроде так у програмеров обзывается…).
Поясню - камера при переключении тумблера начинает сканирование = поворот вправо до упора, задержка (было бы очень класно, чтоб задержку можно было выставить или в Планере или (что еще круче !) доп каналом с крутелкой…), поворот в центр, поворот влево и т.д.?
у тебя на видео впринципе так и есть - поворот -пауза-поворот… но на другом канале хотелось бы и с паузой в крайних точках…

ukkr

Олег, с возвращением. Позволю себе повторить вопрос

radio.pde
процедура init_rc_out():
Код:
static void init_rc_out()
{
APM_RC.OutputCh(CH_1, g.channel_roll.radio_trim); // Initialization of servo outputs
APM_RC.OutputCh(CH_2, g.channel_pitch.radio_trim);
APM_RC.OutputCh(CH_3, g.channel_throttle.radio_min);
APM_RC.OutputCh(CH_4, g.channel_rudder.radio_trim);

APM_RC.OutputCh(CH_5, g.rc_5.radio_trim);
APM_RC.OutputCh(CH_6, g.rc_6.radio_trim);
APM_RC.OutputCh(CH_7, g.rc_7.radio_trim);
APM_RC.OutputCh(CH_8, g.rc_8.radio_trim);

APM_RC.Init(); // APM Radio initialization

APM_RC.OutputCh(CH_1, g.channel_roll.radio_trim); // Initialization of servo outputs
APM_RC.OutputCh(CH_2, g.channel_pitch.radio_trim);
APM_RC.OutputCh(CH_3, g.channel_throttle.radio_min);
APM_RC.OutputCh(CH_4, g.channel_rudder.radio_trim);

APM_RC.OutputCh(CH_5, g.rc_5.radio_trim);
APM_RC.OutputCh(CH_6, g.rc_6.radio_trim);
APM_RC.OutputCh(CH_7, g.rc_7.radio_trim);
APM_RC.OutputCh(CH_8, g.rc_8.radio_trim);
}
На кой они тут один и тот же код дважды повторяют? Чё-то я глубинный смысл этого не понимаю.

alex-ber
LeonVS:

Алекс, ты эти строчки закоментил?

Ух… Ну вы все и строчить стали - прямо Чат!!!
Не успел написать а тут уже все обсудили…
Леонид - естественно : НЕТ! Я тогда про эти траблы с микриками даже не догадывался! Спасибо - завтра попробую закоментить и залить 26-ю…

Syberian
LeonVS:

Полагаю зависон вызывался не закоментированными строчками считывающими в ардупилоте микрики

я замечал конкретный сброс платы, т.е. в планировщике писало initialising

ukkr:

Позволю себе повторить вопрос

позволю себе не ответить, т.к. не моих рук дело 😃 На мой взгляд, верхняя половина до init бесполезна.

alex-ber
Syberian:

я замечал конкретный сброс платы, т.е. в планировщике писало initialising

Привет Олег!!!
Да, если память мне не изменила - было тоже самое: Вортекс просто уходил в перезагруз…
Тогда мы решили, что переполнялся буфер обмена (у нас с Олегом АРС 220 с низкой скоростью обмена, у Леонида даталинк от Александра с максимальной скоростью…).

ukkr
alex-ber:

Поясню - камера при переключении тумблера начинает сканирование = поворот вправо до упора, задержка (было бы очень класно, чтоб задержку можно было выставить или в Планере или (что еще круче !) доп каналом с крутелкой…), поворот в центр, поворот влево и т.д.?
у тебя на видео впринципе так и есть - поворот -пауза-поворот… но на другом канале хотелось бы и с паузой в крайних точках…

Дык, она паузу и делает после поворота в крайнюю точку, как Леонид и заказывал 😃 Или имеется ввиду, что серва должна плавно перемещаться с определённой задержкой, скажем на 5-10 градусов в секунду. При достижении крайнего положения, она должна замереть на какую-то паузу, а потом начать двигаться в обратную сторону. И так до потери пульса?

БТВ, у МегаПилота есть поддержка управлением камера-маунтом. Само управление сосредоточено в AP_Mount и поддерживает туеву кучу функционала, к примеру
MAV_MOUNT_MODE_RETRACT // высунуть маунт на заданное пользователем положение и ничего больше не делать
MAV_MOUNT_MODE_NEUTRAL //нейтральное положение
MAV_MOUNT_MODE_MAVLINK_TARGETING // то же, что и MAV_MOUNT_MODE_NEUTRAL + постоянная работа стабилизации подвески
MAV_MOUNT_MODE_RC_TARGETING // ручное управление с пульта
MAV_MOUNT_MODE_GPS_POINT //направлять камеру на ГПС координату
Только я это не тестировал, посему не смогу вам рассказать, работает ли оно или это очередной мёртвый отросток от основной версии. 😦

Syberian:

позволю себе не ответить, т.к. не моих рук дело На мой взгляд, верхняя половина до init бесполезна.

Чудненько, наши мысли совпали 😃 Вот и стал код Пирата на 8 строчек короче 😃

alex-ber
ukkr:

Только я это не тестировал, посему не смогу вам рассказать, работает ли оно или это очередной мёртвый отросток от основной версии.

Спасибо!
ПС Константин - какбы мы в этой теме Свои - давайте на ТЫ - так вроде проще общаться! (если не против…).
Спасибо еще раз - буду разбираться…

Syberian
ukkr:

Самое интересное, у М1 и М2 “+” запараллелен.

Изначально вортекс был придуман для мультикоптеров. М1 соединен с М2 для того, чтобы в случае трикоптера запитать хвостовую серву. Во все остальные места втыкались регуляторы, имеющие свои UBEC. Плата имеет свой стаб от 12В (который дико греется).
Вот схема разводки питания вортекса
…rcgroups.net/…/a4082697-15-Power_Vortex.jpg

В случае самолета нужно

  1. соединить все средние провода Мх
  2. соединить их с Sonar+, чтобы обеспечить питание самой платы.

Также я лично соединил с USB+, чтобы не подавать внешнее питание при перешивке платы.

В первом посте картинка есть
www.rcgroups.com/forums/showthread.php?t=1547655

ukkr:

С помощью функции analogRead() вы можете читать значения с любого из этих входов в любом месте. На самом деле – Mega2560 пофигу, что подключено на эти пины, оно просто оцифровывает тот сигнал, что вы подаёте на пин. Это может быть как термометр, так и барометр, который выдаёт аналоговый сигнал и т.д.

Главное, отключить led sequencer с соответствующих каналов, т.к. он объявляет их выходами.

Извините, что не по порядку коментю… нафлудили много 😁

ukkr
Syberian:

В случае самолета нужно

  1. соединить все средние провода Мх
  2. соединить их с Sonar+, чтобы обеспечить питание самой платы.

Олег, 1е-- сделал, как и писал,-- соплёй припоя с задней стороны платы. 2е – за неимением сонара пока не делаю. Обнаружил, что pan и tilt тоже идут без “+”. Ну да, у тебя на рисунке так и есть( ничего, что на ты?).

LeonVS:

APM_RC.OutputCh(9, xxx_pos); - сие хрень не где не чего не кажет, но сервой дрыгает

Леонид, забыл предупредить.

OutputCh 

метод принимает в качестве второго параметра не градусы( или градус*10, как в случае с

closest_limit()

), а PWM, который должен находиться в промежутке от 900-2100us. Посему, тебе мой код надо было поправить под этот метод, чтоб он использовал не -1800/1800 ранж, в 900/2100. Олеговский метод, OutputCh имеет защиту от дурака, он корректирует второй параметр, чтоб тот не вылез за пределы 900-2100, так что серву не спалите 😁.

Саш,

Спасибо еще раз - буду разбираться…

, там, чтоб включить в коде поддержку Камера Маунта, надо в config.h поставить
вместо

#ifndef MOUNT
# define MOUNT		DISABLED
#endif

такое

#ifndef MOUNT
# define MOUNT		ENABLED
#endif

Да, Саш, вот накидал, тот второй вариант, о котором говорил:

Смотреть лучше в полноэкранном режиме, отключив звук 😄 По центру как раз белая качалка сервы, видно как работает. Сорри за качество видео, у нас 2 ночи, свет не могу включить, а под рукой только мобилка. 😮 Алгоритм прост – серва крутится на определённый градус с паузой в секунду после каждого своего поворота. Когда она доходит до крайнего положения – она замирает в этом крайнем положении на 3 секунды. После этого она начинает крутиться в обратную сторону, пока не достигнет другого крайнего положения. И так, пока не надоест. B)

Syberian

Так и не вкурил, кому и зачем понадобилась дрыгалка? 😁
Может, ее в секвенсор интегрировать?

ukkr

Первая дрыгалка на 2 положения понадобилась Леониду. Вторая “продвинутая” Саше.

😁
Первая дрыгалка на 2 положения понадобилась Леониду. Вторая “продвинутая” Саше.

LeonVS
Syberian:

Номер канала (число, а не СН_х) - Мх

Олег, а почему тогда по “СН_х” данные в планер идут верно? Может там две переменных, одна для вывода данных, другая для вывода на серву? Или это все же “кривость” портирования?

ukkr:

метод принимает в качестве второго параметра не градусы( или градус*10, как в случае с

Спасиб, но я все равно переделал сей код под конкретные циферы в обоих положениях, мне так удобней 😃

Syberian:

Так и не вкурил, кому и зачем понадобилась дрыгалка?

Дрыгалка понадобилась мне, будет управлять затвором фотика 😃

ukkr:

Леониду. Вторая “продвинутая” Саше.

Чую вторая продвинутая при скорости ская в 60км в час будет крайне бесполезна 😃 Эт если только на забор соседской дачи прилепить 😉))
Если для обзора камеры то лучше попытаться разобраться с камера маунтом (смотреть на заданную координату фишка зачетная должна быть) Там до кучи и стабилизация камеры есть 😃

Syberian
LeonVS:

а почему тогда по “СН_х” данные в планер идут верно?

Ща растолкую.
Есть набор объектов класса RC_CHANNEL: ch_throttle, ch_roll, ch_pitch, ch_5 и т.д. - это не просто переменные. С ними можно выполнять действия, определенные классом и читать их некоторые параметры. К примеру, ch_1.ServoOut возвращает значение от -512 до 512, а ch_1.pwm_out - то же, но приведенное к ППМ-каналу: от 900 до 2000.
ch_1.rc_in возвращает то, что на него поступило с приемника. Также в объекте производится субтриммирование, ограничение диапазонов и проч вызовом функции ch_1.CalcPWM();

После всего вызывается другой объект apm_rc.outputch(CH_1.ch_1.pwm_out), что собственно и переписывает положение канала в генератор сервоимпульсов.
Независимо от этого вызывается процедура протокола mavlink, которая передает ch_1.servo_out по телеметрии.

На пальцах: данные в планер и то, что мы “вручную” пишем на сервовыходы платы, никак не связаны между собой.
К тому же, именно серво-выходы (не путать с каналами приемника) с 5-го по 8-й в планер вообще не поступают.

Заметь, CH_x (большими буквами) - это просто символьный дефайн числа (х-1) для удобства, чтобы каналы не с нуля считались, а ch_x (маленькими буквами) - это уже объект.

alex-ber
LeonVS:

Чую вторая продвинутая при скорости ская в 60км в час будет крайне бесполезна Эт если только на забор соседской дачи прилепить ))

про вторую дрыгалку я просил пока не знал о маунте! конечно если разобраться с ним то эта дрыгалка будет уже не нужна… но всеравно спасибо - значит в принципе на свободный канал можно любую программу отработки сервы написать (если умеешь…).
Ладно - пока на работе можно теорию разводить… вечером приду домой и займусь железом - вот тогда более предметно поговорим!

LeonVS

Просто перевод маунт в енейбл результата не дал…