ArduCopter Mega: порт на обычную Arduino (тестим)

Syberian

Поздравляю 😃
Пошагово:
Раз уж написал свои драйверы, сперва нужно проверить, работают ли они вообще. В библиотеке AP_ADC есть examples и в нем скетч весом в 5 кб (а не 124). Запустив его, в консоли ардуины можно увидеть все 7 каналов “типа АЦП”. 0,1,2,4,5,6 меняются? отлично, едем дальше

  • скачать заново megapirateB2.zip
  • в папке ардуины потереть все библиотеки (кроме своей AP_ADC, но лучше из нее код перенести в новую) и залить из архива библиотеки
  • обновить конфигуратор в меню UPDATE
    -засадить ногу 40 на землю
  • теперь можно выбрать AC2setup-Setup, на кнопку не жать, а переключиться на вкладку Initial settings.

Должно быть так:

Init ACM

RAM: 1747
FW Version 6
----------------------------------------



Entering interactive setup mode...

Type 'help' to list commands, 'exit' to leave a submenu.
Visit the 'setup' menu for first-time configuration.

AC 2.0.2 Beta] 

Там можно набрать test
затем ADC и узреть свои значения датчиков.

Как дойдешь до этого пункта, пиши, пойдем дальше 😃

SovGVD

как не ковыряю, всё тоже самое, данные с датчиков бегут (пока не кручу - циферки на месте, кручу - всё меняется), переключился на вкладку (ногу естественно засадил), там:

Init ACM

RAM: 1747
FW Version 6
----------------------------------------

и всё на этом =(
кстаии делаю всё это через VirtualBox с виндой XP SP2 Eng (с AeroQuad нормально работало)

методом тыка: повисает на barometer.Init(); - барометра у меня нету =) где его отключать?

UPD: закоментил инициализацию барометра, теперь CLI работает, на тесте всё ок, циферки бегут (только навернка знаки перепутаны, но это на потом)

что дальше?

Syberian
SovGVD:

методом тыка

Отлично 😃 Только это не выход. Как только он начнет опрашивать баро в полете, начнется зависон и тупняк. Баро там сильно интегрирован, поскольку входит в состав оригинальной платы.
Придется “занулять” библиотеку APM_BMP085, или хотя бы ее работу с и2с.
В панельке CLI пройдись по всем кнопкам сверху кроме erase и reset, чтобы все откалибровать и выбрать тип пепелаца и набор датчиков
Затем вытащи перемычку из 40 и щелкни по raw sensor data. Следи за текстом на консоли, чтобы отловить, зависнет где-нить или нет.
Если все поканает и поползут графики, проверь работу индикаторов ROLL PITCH YAW, чтоб соответствовали отклонению коптера - это и есть проверка полярности. Также возможно придется менять делитель в гиро и акселе.
С акселем проще: после калибровки на оси Z будет -1000. Усилением акселя нужно добиться, чтобы в перевернутом состоянии было +1000, а не -500, 0 или проч. Делитель одинаковый на все оси.

Как настроишь, можно включать пульт, подрубать моторы и настраивать пиды. Потом, собсно, летать.

SovGVD

покоментил работу с i2c, график заработал:

буду настраивать дальше, пока что ROLL PITCH YAW фигню показывают и возвращаются к нулям, как было при неверном расположении датчиков в mutiwii =)

Syberian

А чо графики такие порепанные? зайди в консоль, набери test ввод profiling
цифра в конце абракадабры должна быть не более 6000 - это тайминг основного цикла, как в мультивие

SovGVD


upd: аксель подобрал, по Z при спокойстивии -1000, переворачиваю +1000 (±5)… ща гиру помучаю

Syberian

Тайминг ОК, сказывается отсутствие барометра. Дикие показания гиры, в драйвере значения от гиры подели, ориентируясь на YAW: повернул машинку на 90 град - стрелка тоже должна на 90 град, а не крутиться, как пропеллер. Для затравки: при повороте ок 90 град/сек показания на графике примерно 200-400.

По полярности датчиков.
Смотри в полетном режиме на вкладке флай дата:
При наклоне вперед accel X и gyro Y в минус.
При наклоне вправо accel Y падает, gyro X растет
При повороте по часовой - стрелка на стрелочном yaw во второй вкладке ползет тоже по часовой

Еще один совет. В акселерометре делитель выставь (одинаковый для осей) такой, чтобы в консоли test - ADC 7-й параметр был равен 416, затем откалибруй, нажав level или в консоли exit - setup - level

SovGVD

436 7 параметр (±2), сейчас еще поиграюсь с делителем, полярность поменял, всего один минус лишний надо было поставить =) там в момент инициализации/калибровки тоже делители надо наставить и полярность расставить (для гиры)?
стрелочки почти адекватно отклоняются, но ошибка в градусах есть пока что… это нормально что на графике меняется быстро всё, а стрелочки ползут медленно к своим значениям (доходят и стоят)?

Syberian

Все действия с кодом - только в библиотеке!
Калибровку гиры прога делает сама каждый запуск, если дописывал - убери.
Калибровка акселя - по команде LEVEL.

Стрелки обновляются с частотой 3Гц, график - 20. Фишка настройки в том, чтобы при отклонении стрелка довольно резко вставала в нужный угол. Если она встает “не туда”, а потом медленно подползает куда нужно (недолет-перелет) - надо регулить гиру. Если перелет - делить на большее число, и наоборот.

Аксель должен быть 416, на худой конец 410.

SovGVD

аксель настроил, теперь 416 (±1)
по поводу стрелок, чето YAW себя совсем не адекватно ведет:

наклоняю платку влево/вправо (или вправо/влево) на 90* затем ставлю обратно на ровную поверхность (от которой калибровал)

Syberian

Стрелки ведут себя так, как будто гира задушена насмерть, работают только на акселях. Вот как вначале у тебя переворот был, пока датчики ползли, оно уже перестроилось бы. Уменьшай делитель гиро, чтоб добиться, как я описывал. Чем видео записать с экрана?

SovGVD
Syberian:

Чем видео записать с экрана?

hypercam вроде в винде есть (я то записываю в убунте XVidCap окошко в VirtualBox =)))

Syberian:

Для затравки: при повороте ок 90 град/сек показания на графике примерно 200-400.

гиру к этим значениям старался привести… или это для акселя было? =)
сейчас в 10 раз уменьшил делитель… стал чуток (градусов 5-6) перелетать и потом возвращается к нужной отметке
значение методом тыка подбирать? или есть какие то более лучшие методы?

UPD: в общем получается пока такая штука:

если резко далеко (более 40 градусов примерно) крутануть, то доезжает (в начале крутанул на 90*, потом резко в обратку на 180 (90 в другу сторону от нуля)), если немного, то вполне нормально или переезжает или недоезжает - идеальности нет

UPD: еще горизонт - если платку вверх тармашками и потом обратно, то горизонт доплывает, если не сильно мучить, то встает в нули адекватно

Syberian

Полная постоянность будет при добавлении компаса 😉 Теперь, насколько могу судить по видео, IMU более-менее настроен. Теперь можно попробовать стартовать в руке. Раскладка моторов по идее такая же, как в Мультиви. На пульте поставь экспоненты под 60% везде, кроме газа. На первый раз хотя бы.
Активируются моторы так же. Учти, при газе в 0 моторы отключаются.
Когда будешь настраивать ПИДы, начни со Stabalize damp, уменьшая его постепенно, пока не перестанет дергаться (если вообще дергаться будет). Потом уже ROLL PITCH P.
Я сейчас с ITG3200 засел, изучаю ее фильтрацию, скоро обновлю архивчик.

SovGVD

у меня 4х каналка, без шнурка для настроек (кабель только-только приземлился) =) надо теперь умудриться переделать переключение режимов, в каком месте там отрабатываются подобные команды?
в ArduPirates есть всякие калибрации/триммирование хитрыми движениями стиков как в multiwii?

Syberian

Полетные режимы переключаются каналом 5. Если там просто свич, будет 2 режима, если 3-позиционный - 3. Если крутилка, то заменой ее на галетный переключатель с резюками можно получить все 6 режимов: акро, стаб, удержание высоты, удержание положения, полет по точкам, возврат домой.
На каждое доступное положение можно выбрать любой режим, по умолчанию - стаб.

SovGVD

а точно multiwii стиль подключения моторов? в GUI моторы ползут как надо, а в реале даже крутиться не начинают (газ в любом положении - всеравно не крутятся)
2 - перед левый
3 - задний правый
5 - передний правый
6 - задний левый

Syberian

D2,3,5,6 - моторы для квадра/трехи, проверенно работает.
Прерывания собственные не добавлял?
При включении слышен писк, что “ноль” пойман?
Регули обычный РРМ понимают или перешиты на скоростной? Попробуй серву подцепить…

SovGVD
Syberian:

Прерывания собственные не добавлял?

нет, только закоментил барометр и переписал код (инициализация и получение данных) под свои датчики
на всякий случай еще проводки прозвонил - нормально всё

UPD: едиснтвенный момент - код работы с датчиками от прошлой версии, там вроде чето с интераптами есть для дальномера… не оно? =)

Syberian

те никому не мешают, дальномер работает прекрасно, без него - тоже.
Главный показатель работы - моторы в правом столбце. Если там чото есть, значит, РРМ тоже прет. У меня же работает!
Серву подключи 😃

SovGVD
Syberian:

Серву подключи

подключил, когда в проге сижу - работает, когда на коптере ставлю - не работает - там ничего хитрого еще не надо делать? питается через Vin 5 вольтами с ESC (так же питалось на мултивие, но 328р)
если просто запитать от USB (без проги) - тоже серва не работает

Syberian

Нужно дождаться, чтобы лампочка загорелась на постоянку, а потом еще 15 сек, а потом активировать моторы, чтобы лампочка мигать стала - в курсе? 😉