ArduCopter Mega: порт на обычную Arduino (тестим)
бодяга
Это же вроде soft_iron и hard_iron эффекты, нужно калибровать магнетометр. На сайте HoneyWell есть Application Notes по этому поводу, математика в наличии. www.magneticsensors.com/literature.php.
…honeywell.com/…/Applications_of_Magnetoresistive_…
…honeywell.com/…/AN215_Cross_Axis_Effect_for_AMR_M…
sensorsmag.com/…/compensating-tilt-hard-iron-and-s…
serj “На широте Питера, например, вектор магнитного поля смотрит в землю под углом около 70 градусов к вертикали.” 😦
Для GPS надо носить на улицу, т.к. окна на север, фикса нет, хотя статус показывается нормально.
С тем что окна на север - не причина не коннекта. Спутники не геостационарные - потому они со всех сторон горизонта. Причина в чем то другом.
вектор магнитного поля смотрит в землю
Но ведь не вертикально же, согласитесь?
не вертикально
Конечно, не на полюсе живем. Но на экваторе ситуация гораздо приятнее.
Считается, что с монтажом магнетометра не стоит заморачиваться. Заморачиваться нужно с калибровкой, вращая на идеально горизонтальной поверхности. По полученной фигуре типа эллипса найти коэффициенты корректировки, которые дадут окружность на графике напряженности магнитного поля. Компас еще не выслали, нужно плату делать - не скоро смогу сам проделать калибровку.
FreeFlight IMU 1.22L от сюда www.viacopter.eu/index.php?page=shop.product_detai…
Поведение магнетометра
www.youtube.com/watch?v=zXU8aebq-Aw
Кручу коптер держа в руках.
Вполне адекватно
дошли руки до этой прошивки, но не пойму что я делаю не так: залил прошивку, запускаю конфигуратор, Action->AC2 Setup, тыкаю Setup - там одна кнопка, тыкаю её пишет что порт открыт и далее всё повисает… если залезть в другие вкладки, пишет Mavlink четотам, повисает, появляется отсчет таймаута, потом: “Comport open failed - Please try again and make sure your not in CLI mode”
у меня только 2 сенсора, код поменял под них (тоже самое если не менять код)… куда копать (я в CLI режиме? ничего не замыкал)? =)
на всякий случай, если это важно - приемник не подключен, только ардуинка и датчики
upd: в CLI режиме:
Init ACM
RAM: 1895
FW Version 5
----------------------------------------
дальше ничего не происходит =(
Поздравляю 😃
Пошагово:
Раз уж написал свои драйверы, сперва нужно проверить, работают ли они вообще. В библиотеке 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 и узреть свои значения датчиков.
Как дойдешь до этого пункта, пиши, пойдем дальше 😃
как не ковыряю, всё тоже самое, данные с датчиков бегут (пока не кручу - циферки на месте, кручу - всё меняется), переключился на вкладку (ногу естественно засадил), там:
Init ACM
RAM: 1747
FW Version 6
----------------------------------------
и всё на этом =(
кстаии делаю всё это через VirtualBox с виндой XP SP2 Eng (с AeroQuad нормально работало)
методом тыка: повисает на barometer.Init(); - барометра у меня нету =) где его отключать?
UPD: закоментил инициализацию барометра, теперь CLI работает, на тесте всё ок, циферки бегут (только навернка знаки перепутаны, но это на потом)
что дальше?
методом тыка
Отлично 😃 Только это не выход. Как только он начнет опрашивать баро в полете, начнется зависон и тупняк. Баро там сильно интегрирован, поскольку входит в состав оригинальной платы.
Придется “занулять” библиотеку APM_BMP085, или хотя бы ее работу с и2с.
В панельке CLI пройдись по всем кнопкам сверху кроме erase и reset, чтобы все откалибровать и выбрать тип пепелаца и набор датчиков
Затем вытащи перемычку из 40 и щелкни по raw sensor data. Следи за текстом на консоли, чтобы отловить, зависнет где-нить или нет.
Если все поканает и поползут графики, проверь работу индикаторов ROLL PITCH YAW, чтоб соответствовали отклонению коптера - это и есть проверка полярности. Также возможно придется менять делитель в гиро и акселе.
С акселем проще: после калибровки на оси Z будет -1000. Усилением акселя нужно добиться, чтобы в перевернутом состоянии было +1000, а не -500, 0 или проч. Делитель одинаковый на все оси.
Как настроишь, можно включать пульт, подрубать моторы и настраивать пиды. Потом, собсно, летать.
покоментил работу с i2c, график заработал:
буду настраивать дальше, пока что ROLL PITCH YAW фигню показывают и возвращаются к нулям, как было при неверном расположении датчиков в mutiwii =)
А чо графики такие порепанные? зайди в консоль, набери test ввод profiling
цифра в конце абракадабры должна быть не более 6000 - это тайминг основного цикла, как в мультивие
upd: аксель подобрал, по Z при спокойстивии -1000, переворачиваю +1000 (±5)… ща гиру помучаю
Тайминг ОК, сказывается отсутствие барометра. Дикие показания гиры, в драйвере значения от гиры подели, ориентируясь на YAW: повернул машинку на 90 град - стрелка тоже должна на 90 град, а не крутиться, как пропеллер. Для затравки: при повороте ок 90 град/сек показания на графике примерно 200-400.
По полярности датчиков.
Смотри в полетном режиме на вкладке флай дата:
При наклоне вперед accel X и gyro Y в минус.
При наклоне вправо accel Y падает, gyro X растет
При повороте по часовой - стрелка на стрелочном yaw во второй вкладке ползет тоже по часовой
Еще один совет. В акселерометре делитель выставь (одинаковый для осей) такой, чтобы в консоли test - ADC 7-й параметр был равен 416, затем откалибруй, нажав level или в консоли exit - setup - level
436 7 параметр (±2), сейчас еще поиграюсь с делителем, полярность поменял, всего один минус лишний надо было поставить =) там в момент инициализации/калибровки тоже делители надо наставить и полярность расставить (для гиры)?
стрелочки почти адекватно отклоняются, но ошибка в градусах есть пока что… это нормально что на графике меняется быстро всё, а стрелочки ползут медленно к своим значениям (доходят и стоят)?
Все действия с кодом - только в библиотеке!
Калибровку гиры прога делает сама каждый запуск, если дописывал - убери.
Калибровка акселя - по команде LEVEL.
Стрелки обновляются с частотой 3Гц, график - 20. Фишка настройки в том, чтобы при отклонении стрелка довольно резко вставала в нужный угол. Если она встает “не туда”, а потом медленно подползает куда нужно (недолет-перелет) - надо регулить гиру. Если перелет - делить на большее число, и наоборот.
Аксель должен быть 416, на худой конец 410.
аксель настроил, теперь 416 (±1)
по поводу стрелок, чето YAW себя совсем не адекватно ведет:
наклоняю платку влево/вправо (или вправо/влево) на 90* затем ставлю обратно на ровную поверхность (от которой калибровал)
Стрелки ведут себя так, как будто гира задушена насмерть, работают только на акселях. Вот как вначале у тебя переворот был, пока датчики ползли, оно уже перестроилось бы. Уменьшай делитель гиро, чтоб добиться, как я описывал. Чем видео записать с экрана?
Чем видео записать с экрана?
hypercam вроде в винде есть (я то записываю в убунте XVidCap окошко в VirtualBox =)))
Для затравки: при повороте ок 90 град/сек показания на графике примерно 200-400.
гиру к этим значениям старался привести… или это для акселя было? =)
сейчас в 10 раз уменьшил делитель… стал чуток (градусов 5-6) перелетать и потом возвращается к нужной отметке
значение методом тыка подбирать? или есть какие то более лучшие методы?
UPD: в общем получается пока такая штука:
если резко далеко (более 40 градусов примерно) крутануть, то доезжает (в начале крутанул на 90*, потом резко в обратку на 180 (90 в другу сторону от нуля)), если немного, то вполне нормально или переезжает или недоезжает - идеальности нет
UPD: еще горизонт - если платку вверх тармашками и потом обратно, то горизонт доплывает, если не сильно мучить, то встает в нули адекватно
Полная постоянность будет при добавлении компаса 😉 Теперь, насколько могу судить по видео, IMU более-менее настроен. Теперь можно попробовать стартовать в руке. Раскладка моторов по идее такая же, как в Мультиви. На пульте поставь экспоненты под 60% везде, кроме газа. На первый раз хотя бы.
Активируются моторы так же. Учти, при газе в 0 моторы отключаются.
Когда будешь настраивать ПИДы, начни со Stabalize damp, уменьшая его постепенно, пока не перестанет дергаться (если вообще дергаться будет). Потом уже ROLL PITCH P.
Я сейчас с ITG3200 засел, изучаю ее фильтрацию, скоро обновлю архивчик.
у меня 4х каналка, без шнурка для настроек (кабель только-только приземлился) =) надо теперь умудриться переделать переключение режимов, в каком месте там отрабатываются подобные команды?
в ArduPirates есть всякие калибрации/триммирование хитрыми движениями стиков как в multiwii?