Квадрокоптер своими руками: Часть II.1
красным отмечено место перерезания дорожки, так же на обратной стороне есть дорожка ведущая к чипу, её тоже перепиливаем и на обратной стороне есть удобное место для припаивания проводка GND (земля, общий)
Добываем акселерометр BMA020 или BMA180
Вы можете поискать отдельно датчик и самостоятельно сделать подобную платку или попросить друзей или купить готовую с датчиком BMA020 или BMA180.
Другие варианты датчиков
На самом деле подойдут любые доступные гироскоп с акселерометром с шиной I2C, но придется переписывать соответствующие части кода или вставить уже готовый код из проекта MultiWii, например для гироскопа L3G4200D или аналогового акселерометра adxl335. Но иногда придется повозиться с ориентацией осей датчиков (менять знаки и оси в коде) и борьбой с вибрацией.
Сборка мозгов
Для удобства монтажа все что надо можно разместить на какой нибудь платке прототипирования, у меня например получилось вот так (не красиво, зато работает, слева сверху модуль связи, оставшиеся от прошлого проекта — не используется):
Распиновка подключения может немного отличаться, так как прошивка периодически меняется, но на момент написания статьи моторы, датчики, приемник и т.д. следует подключать так (из release note):
Моторы (вид сверху, перед коптера вверху, направление вращения и соотвествующие пропеллеры можно посмотреть на этой картинке или этой) |
|
---|---|
Передний левый | 2 |
Передний правый | 5 |
Задний левый | 6 |
Задний правый | 3 |
Приемник (хотя бы первые 4, можно взять разъем от IDE шлейфа и отрезав лишнее вставить в приемник) |
|
Throttle | A8 |
Roll | A9 |
Pitch | A10 |
Yaw | A11 |
Mode (Aux1) | A12 |
Aux2 | A13 |
Cam1 | A14 |
Cam2 | A15 |
Питание мозгов и приемника | |
Arduino можно питать от контроллера скорости (если имеет преобразователь питания), подпаяв выход питания к USB и Vin, другой вариант — питать напрямую от аккуулятора через специальный разъем питания на плате | |
Приемник запитываем от Arduino через соответствующие выходы +5v и GND | |
Другое | |
Переход в режим командной строки (ага, будет консолька) и настройки для удобства можно поставить перемычку или выключатель |
A5 замыкать с GND |
Модуль GPS | RX2, TX2 |
Модуль Xbee | RX3, TX3 |
Сонар/дальномер | 9 — tx, 10 — echo |
Светодиоды (не забываем про резисторы последовательно) | 13,30,31 |
Настройка прошивки и загрузка
- Скачиваем архив с прошивкой и распаковываем
- Папку libraries следует скопировать поверх (с заменой) такой же папке в Arduino IDE (arduino-0022)
- В папке libraries/AP_ADC в файле AP_ADC_ADS7844.cpp выбрать тип датчика: раскомментировать один из вариантов #define FFIMU, #define ALLINONE или одновременно #define ALLINONE и #define BMA_020 для варианта с датчиками ITG3200 и BMA020
- Если у вас нет барометра (как у меня), то придется закоментировать код работы с шиной I2C с этим датчиком в файле libraries/APM_BMP085/APM_BMP085.cpp
- Открыть через Arduino IDE любой из файлов в папке MegaPirate
- Во вкладке APM_Config.h выбрать тип своего коптера, для этого после #define FRAME_CONFIG вставьте один из вариантов: QUAD_FRAME TRI_FRAME HEXA_FRAME Y6_FRAME OCTA_FRAME, а так же тип ориентации рамы #define FRAME_ORIENTATION, выставив PLUS_FRAME или X_FRAME
- Если у вас нет GPS, лучше в начале изменить значение #define GPS_PROTOCOL на GPS_PROTOCOL_NONE, чтобы не ждать 10-15 секунд инициализации GPS (когда его нет!)
- Теперь можно подключить Arduino Mega и загрузить этот скетч в контроллер
Настройка коптера
После успешной загрузки скетча-прошивки в Arduino можно скачивать программу настройки (внимание, работает только в Windows и сильно кривовато в Linux с Wine) и замыкать контакт A5 с GND.
После запуска программы в меню Options выбираем COM-порт Arduino:
В меню Action выбираем AC2 Setup
И видим огромную кнопку, на которую нужно нажать и следовать инструкциям, особенно важно не пропустить первое окошко с кучей текста, в котором вас попросят двигать ручки пульта до их минимальных и максимальных значений, а так же другое окошко, в котором вас попросят убедится, что коптер стоит ровно для калибровки датчиков.
После завершения настройки можно размыкать A5 с GND и в меню выбрать пункт AC2 Sensor, чтобы проверить адекватность работы датчиков во вкладке Raw Sensor: повороты платки с датчиками должны четко отрабатываться — как повернули, так стрелка и встала, если она доплывает или перелетает значение, то есть проблемы с датчиками или коэффициентами в вашем коде.
Так же тут же стоит проверить работу приемника в соседней вкладке и если уровни двигаются как надо, то отклоняем джойстик газа (в пульте Mode 2 левый) вниз вправо на 2 секунды (надеюсь на этом этапе у вас не подключен аккумулятор и не стоят пропеллеры), светодиод на контроллере должен начать мигать. А теперь медленно двигаем ручку газа вверх, при этом в левом столбце уровни должны примерно одинаково увеличиваться.
Результат
Ну вот вроде бы и всё =) Теперь можно нацеплять пропеллеры (не перепутайте куда какие, какого вращения и проверьте чтобы моторы крутились в нужную сторону) и попробовать взлететь, для этого поставьте коптер подальше от себя (или держите его в руке над головой), наклоните левую ручку вниз-вправо на 2 секунды и медленно прибавляйте газу. Если коптер взлетает — это уже хорошо, если его начинает трясти, то требуется регулировать PIDы, для этого в меню Action выберите пункт PID Config — AC2, ужаснитесь количеству циферок и начинайте настраивать значения под себя. О том как это делать я не могу рассказать, так как делалось практически методом тыка, но стоит начать с параметра P. У меня хорошо летает вот с такими настройками:
После посадки не забудьте выключит моторы, отклонив ручку левого джойстика вниз-влево на те же 2 секунды и убедитесь что светодиод статуса больше не мигает.
Удачи в сборке и настройке своего коптера и не забывайте читать о новых фишках на форуме.
Небольшое видео падения коптера в кусты
А так же адекватный полет с GoPro на борту
Возможно следующая статья будет о полностью автономном полете, но не раньше чем через месяц, следите за вашей хабралентой.
Датчик положения (гироскоп/акселерометр)
ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ
Описание
С помощью комбинированного модуля гироскопа и акселерометра можно измерять ориентацию робота в пространстве в углах поворота вокруг трех осей: продольной оси «X» (угол крена), поперечной оси «Y» (угол тангажа), вертикальной оси «Z» (угол рыскания).
Ориентация осей X и Y относительно корпуса указана на плате датчика. «Стрелка» поворота указывает в сторону увеличения угла. Ось «Z» направлено вертикально вверх относительно «лицевой» стороны платы, на которой располагаются все компоненты. Угол поворота вокруг оси увеличивается при повороте по часовой стрелке.
Использование
Подключение
Модуль датчика положения использует интерфейс I2C и подключается к любому из двух соответствующих портов I2C контроллера "Трекдуино".
Схема подключения проводов:
На датчике | На контроллере (I2C) |
---|---|
VCC | 5V |
GND | GND |
SCL | SCL |
SDA | SDA |
Программирование
Блок, необходимые для работы с датчиком, расположены в группе блоков «Датчики» и называется «Положение»
При работе с датчиком положения из текстовой среды необходимо вручную подключать соответствующую библиотеку gyro_accel.h и вызывать функцию калиброки setupAccel() в секции setup() :
При использовании графического блока эти функции генерируются автоматически.
Режимы работы
Так как датчик совмещает в себе два устройства (гироскоп и акселерометр), то и выдавать показания он может основаваясь на каждом из них (режимы «только акселерометр» и «только гироскоп»), либо комбинируя эти показания для усреднения и стабилизации (режим «усредненный»)
Режим «Только акселерометр»: углы измеряются только акселерометром на основании измерения вектора силы тяжести.
Плюсы: нет накапливающейся во времени погрешности
Минусы: показания крайне нестабильны, чувствительны к вибрации и боковым ускорениям
Так как основываясь на информации о положении вектора силы тяжести невозможно определить вращение вокруг вертикальной оси Z, при попытке получить показания по оси Z в режиме «только акселерометр» вы всегда будете получать «0». Определение вращения вокруг Z возможно только в режимах «только гироскоп» и «усредненный»
Режим «Только гироскоп»: углы измеряются гироскопом путем измерения угловых скоростей и интегрирования их по времени.
Плюсы: показания стабильны и мало подвержены влиянию случайных ускорений и вибрации
Минусы: ошибка накапливается во времени. Показания зависят от временных промежутков между измерениями. Чем чаще производятся измерения, тем точнее результат.
Режим «Усредненный» (рекомендуется в большинстве случаев): показания обоих датчиков программно комбинируются, взаимно устраняя недостатки друг друга. Показания акселерометра, ошибка в которых не накапливается во времени, «фильтруются» показаниями гироскопа, таким образом скачки в показаниях при случайных ускорениях и вибрации игнорируются.
Плюсы: показания стабильны и мало подвержены влиянию случайных ускорений и вибрации.
Минусы: по оси Z все равно накапливается ошибка, так как для нее используется только гироскоп.
Гироскопический датчик Lego EV3
Гироскопический датчик EV3 поставляется в составе образовательного конструктора Lego Mindstorms EV3. В домашней версии Lego EV3 датчика гироскопа нет. Если есть необходимость, его можно купить отдельно.
Датчик гироскоп — это цифровой датчик
гироскопический датчик Lego EV3
Принцип работы гироскопического датчика
Принцип работы датчика заключается в том, что он способен отслеживать вращение. Датчик гироскопа EV3 способен обнаружить вращение всего по одной оси. На верхней стороне датчика мы можем увидеть две стрелки. Эти стрелки показывают нам плоскость работы гироскопического датчика.
- При вращении датчика в плоскости стрелок на верхней части датчика он может определять угловую скорость вращения. Она измеряется в градусах в секунду. 440 градусов в секунду является максимальной угловой скоростью, которую модет измерить датчик.
- Кроме скорости вращения датчик может определять угол вращения. Измерение угла вращения происходит в градусах. Точность измерения гироскопического датчика +/- 3 градуса если поворот на 90 градусов.
Особенности датчика гироскопа EV3
Для правильной работы датчика его нужно включать в контроллер EV3 в полностью неподвижном состоянии. Когда мы устанавливаем гироскопический датчик на робота обязательным условием является полная неподвижность робота в его начальном состоянии. Робот должен стоять без движения, иначе датчик будет работать некорректно. При помощи этого датчика можно легко программировать повороты робота вокруг оси. Датчик имеет частоту дискретизации 1 килогерц.
Сенсор подключается к блоку программирования EV3 плоским черным соединительным кабелем, который входит в набор. Гироскопический датчик можно подключить к любому входному порту, который обозначен цифрами от 1 до 4. Но по умолчанию датчик подключается во второй порт. Программное обеспечение контроллера Lego EV3 автоматически определяет порт подключения датчика.
порт контроллера
Одной из особенностей датчика гироскопа EV3 является проблема дрейфа. Она состоит в том, что, когда датчик в покое т.е. неподвижен, его показания изменяются и постоянно увеличиваются. Эта проблема может быть решена несколькими способами, но это лучше рассматривать в отдельной статье.
Области применения гироскопического датчика
Гироскопические датчики широко распространены и применяются как в быту, так и в промышленных и военных областях. В быту, например, гироскопы стабилизируют поведение радиоуправляемых моделей самолетов и вертолетов. Навигация и управление транспортными средствами также использует датчики гироскопы. В легковых автомобилях датчики активируют подушки безопасности при опрокидывании.
модели на радиоуправлении
Системы навигации и системы реагирования на чрезвычайные ситуации используют гироскопические датчики для повышения надежности работы оборудования. Роботы, роботизированные платформы в военной области используют датчики гироскопы в системах управления и наведения. Подводные лодки, самолеты, автономные подводные аппараты и многое другое не могут эффективно работать без применения гироскопических датчиков.
Практически на всех смартфонах также установлен датчик гироскопа. Он часто используется в мобильных играх, функциях автоповорота изображения и многих других. Можно привести еще множество примеров использования датчика гироскопа. Но в нашем случае мы изучаем очень простой датчик, который позволяет понять основные принципы работы гироскопов.