Квадрокоптер на Arduino DUE

Dmitry_DM

Всем доброго времени суток! Мы с другом решили сделать квадрокоптер. Хотелось бы посоветоваться на счет этого.

Начну с того, что квадрокоптер должен делать/уметь:

• Использовать стандартные датчики (акселерометр, гироскоп, барометр, компас)

• Полет вне помещения

• Дистанция связи больше 1 км, в идеале 4,7 км (без усилителя, при мин передаче данных)

• Полет более 30-60 мин (не меньше)

• Поддержка GPS

• Управление через компьютер (именно так, и не как иначе, в этом ВСЯ СУТЬ проекта)

• В будущем: установка системы фото/видео съемки

• В будущем: переем и передача звука (от и к квадрокоптеру)

Теперь поговорим, что на данный момент имеется:

• Рама. Чертеж взят отсюда. (уже готовая, вес 870 гр.)

• GY-521 MPU-6050 (Гироскоп + Акселерометр) (ссылка)

• Датчик расстояния - ультразвуковой дальномер HC-SR04 (ссылка)

• Сами мозги Arduino DUE (ссылка)
)

• Двигатели + регуляторы A2212 1000KV + 30A ESC (ссылка)

И то, что предстоит выбрать для дальнейшей покупки:

• Беспроводной модуль связи. И тут 2 варианта:

APC220 (ссылка)

или 3DRobotics 3DR (ссылка)

Какой модуль лучше удовлетворит требования? (+условие, что с ним возможно удобно работать, отсутствие проблемы с драйверами)

• GY-271 HMC5883L I2C 3-осевой электронный компас (ссылка)

• Барометр BMP085 (ссылка)

Дальше пару вопросов с выбором АКБ:

  1. подойдет ли по параметрам силы тока такой аккумулятор (ссылка)?
  2. на счет времени: очень часто встречал: АКБ 2200 mAh - время работы 6-10 мин
    я так подумал и прикинул, что если это для 4 моторов, то для 1 в 4р. больше = 24-40 мин
    а раз так, то если бы аккумулятор был не 2200 а 8800 mAh то время было бы 96-160 мин (на 1 мотор), а теперь вернемся к тому, что моторов 4, таким образом время = 24-40 мин, но выбранный мною АКБ не 8800, а 10000, могу и я рассчитывать на 30-60 минут полета?
    теперь об управлении
    самое главное в нашем проекта - отсутствие пульта управления, в место него мы планируем управлять с ноутбука клавишами, а со временем добавить функцию управление и гейпадом.
    вот собственно в чем главный на данном этапе вопрос:
    каким образом можно проэмулировать положение ручек пульта? например сделать в C# некий ползунок (4 шт) от -100 до 100,
  3. так как задать соответствие положения ручек пульта этим числам ?
  4. в каком виде должны слаться сигналы на ESC ?
  5. не возникнет ли проблемы с калибровкой ESC (ведь там надо отклонять эту заветную ручку газа до упора вниз/вверх) а ручки то нет…
    прошу Вас ответить на мои вопросы, дать советы, разъяснить возможные подводные камни", в общем все, что можете сказать по вышеизложенному
    P.S 1) не предлагать купить готовый и не мучатся
  6. не говорить, что нет необходимости в длительном времени полета
Вадимм
Dmitry_DM:

Дистанция связи больше 1 км, в идеале 4,7 км (без усилителя, при мин передаче данных)
• Управление через компьютер (именно так, и не как иначе, в этом ВСЯ СУТЬ проекта)

А зачем?

Dmitry_DM
Вадимм:

А зачем?

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

сейчас не особо важен выбор АКБ и расчет времени полета

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

maloi333
Dmitry_DM:

на счет времени: очень часто встречал: АКБ 2200 mAh - время работы 6-10 мин
я так подумал и прикинул, что если это для 4 моторов, то для 1 в 4р. больше = 24-40 мин
а раз так, то если бы аккумулятор был не 2200 а 8800 mAh то время было бы 96-160 мин (на 1 мотор), а теперь вернемся к тому, что моторов 4, таким образом время = 24-40 мин, но выбранный мною АКБ не 8800, а 10000, могу и я рассчитывать на 30-60 минут полета?
теперь об управлении

Забудте. Такой коптер будет летать не более 25 минут. А то и их не отлетает.
Для долгих полетов нужны большие винты, а для них нужны моторы с меньшим кв. А они за собой тянут все остальное.

Dmitry_DM:

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

Подкиньте джойстик к компу и все

Вадимм
Dmitry_DM:

сидя за компьютером,

Больше смахивает на военный проект))))

okan_vitaliy
Вадимм:

Больше смахивает на военный проект))))

Больше смахивает на типа преддипломный проект. И судя по задаваемым вопросам проект тупиковый. Это типа как покажите мне на какие кнопки на пианино нажимать и я буду пьесы играть. Ну это сугубо мое мнение. А вдруг мы на пороге великого открытия…

Dmitry_DM
maloi333:

Подкиньте джойстик к компу и все

хм… хотелось бы для начала клавиатуру, но раз вы это советуете, то расскажите, как реализовать обработку стороннего джойстика и передать (самое главное - какой же сигнал??)
еще раз - меня именно и интересует: вот двинули мы ручку газа на 75% что должен передавать Arduino к ESC ? передает то он мощность, но при расчете мощности используется данные будь то с джойстика или с клавиш, но в каком виде должны быть эти самые 75% газа?

okan_vitaliy:

Больше смахивает на типа преддипломный проект

это уже ближе к истине, чем версия Вадимм’а

okan_vitaliy:

судя по задаваемым вопросам проект тупиковый

почему? стабилизация написана (точнее списана с готовых решений), на данный момент мы разбираем ПИДы, а именно как получать мощности для ESC, учитывая внешние факторы и главное - полученное управление

okan_vitaliy:

А вдруг мы на пороге великого открытия

никто еще не делал полноценное управление с ПК, а лишь в этом отличие этого коптера от всех остальных, ничего в этом супер нового я не вижу, это лишь другое управление, которое как реализовать никто не подкинет идею((

maloi333

джойстик это замена клаве и все. Как это реализовать с ардуино без понятия, не общался с ней. А смысл от этого всего при полете в 10 минут???

Dmitry_DM
maloi333:

А смысл от этого всего при полете в 10 минут???

не понимаю чего все так говорят, значит логика такая: коптеры, что строят большинство людей на 2200 mAh летают 10 мин и значит на 10 000 тоже? (как то мало в это верится)

еще вопрос:
на регулятор посылается значение мощности, которое рассчитывается по формуле U = K * ( Err + (1/Ti)*Int + Td*dErr ) ?

  1. как рассчитать коэффициенты, нужные для нахождения U?
  2. каким образом связаны уже стабилизированные углы акселя и гиро+компаса с вышеуказанной формулой?
    как же связать данные управления с этой формулой?
okan_vitaliy

Я бы рекомендовал топикстартеру для начала мультивий. Пусть отладит и полетает, а потом уже что либо самому изобретать и писать. Стартовая база замечательная. И я даю гарантию что 99% вопросов отпадут моментально.

Jade_Penetrate

Простите, но разве ваши фразы

Dmitry_DM:

вот двинули мы ручку газа на 75% что должен передавать Arduino к ESC

Dmitry_DM:

стабилизация написана

не противоречат друг другу?
Полноценное (насколько это возможно) управление с компьютера уже реализовано в проекте ardupilot. Можно указывать точку, к которой должен лететь коптер и все параметры маршрута, можно вывести виртуальные стики аппаратуры на сенсорный экран телефона/планшета, можно подключить видео с устройства захвата и наложить на нее все полетные данные. И это на простом 8битном ядре в сочетании с наземной станцией, 32х битный проект pixhawk, помимо этих функций, может в удержание позиции/навигации по камере (optical flow).
У вас явно отсутствует понимание принципов работы полетного контроллера, об этом много где написано и за вас это никто не прочитает. А проект делать не будет тем более, разве что за материальное вознаграждение.

devv
Dmitry_DM:

еще раз - меня именно и интересует: вот двинули мы ручку газа на 75% что должен передавать Arduino к ESC ? передает то он мощность, но при расчете мощности используется данные будь то с джойстика или с клавиш, но в каком виде должны быть эти самые 75% газа?

Скачиваем:

  • Ардуино ИДЕ
  • Исходники MultiWii (чем старее версия, тем будет проще)

Запускаем Ардуино ИДЕ, Открываем MultiWii. Смотрим на экран и разбираемся в чужом коде.

SovGVD

Оу, весна чтоли пришла уже?

По теме - берем APM, заливаем Arducopter и рулим с компа и/или по MAVLink протоколу хоть с кофеварки… ну или хотя бы его код глянуть и немного теории почитать, чтобы не было такого что не знаем про PWM, но уже хотим автономного дрона и завоевание мира.

Dmitry_DM:

отсутствие пульта управления, в место него мы планируем управлять с ноутбука клавишами, а со временем добавить функцию управление и гейпадом.

не вы первые, не вы последние 😉 расфигачете всё в хлам в первый же полет без пульта с геймпада, хорошо если в больницу или морг при этом никто не попадет
честно слово, послушайте человека, которые такой же фигней занимался, попробуйте сперва просто взлететь с обычным пультом, а уже потом думать о кнопках и прочих извращениях
зы: баро в топку, как и все эти горы деталек на соплях, купите px4/pixhawk (если уж ARM нужен и AVR-ки не хватает), он хотя бы уже летает и поддерживает не мало штук, а в ВУЗе всеравно вам чего нибудь поставят даже за бумажный самолетик

SergDoc
SovGVD:

а в ВУЗе всеравно вам чего нибудь поставят даже за бумажный самолетик

И то правда ))) у меня на 6-м чертеже (плакат), как раз был бумажный самолётик нарисован с обозначенными осями курса, крена и тангажа ))) и все дивились на него как на диво-дивное, и пофиг схемы, сборочные и т.п…)))

5yoda5

Есть подозрение, что акк хилый по токоотдаче…

Dmitry_DM
5yoda5:

Есть подозрение, что акк хилый по токоотдаче…

10С может оказаться мало для таких простеньких моторов?

SovGVD:

купите px4/pixhawk (если уж ARM нужен и AVR-ки не хватает)

ага, здоровую махину, за кучу долларов? нет, спасибо, так как AVR не хватило, мы уже купили Arduino DUE, на котором благополучно располагается ARM 32bit

и раз уж так все пошло, то работать будем или с таким кодом, или с таким

SovGVD:

расфигачете всё в хлам в первый же полет без пульта с геймпада

ну это смотря как настроить и какие руки

Covax

Так, объясните модератору для чего создан этот топик?

  1. спросить конфигруацию (моторы, регули, батарейки), поставить в эту ардуину multiwii - удаляю как дубль существующих тем, где можно спросить
  2. написать свою систему стабилизации на ардуине с этим набором датчиков, отличную от multowii? ok, тогда в нем обсуждается только код и формулы расчета, а не конкретные комплектующие
SovGVD
Dmitry_DM:

ну это смотря как настроить и какие руки

это конечно да, но видимо у вас опыта в настройке коптеров много, раз сразу начали с такого проекта… скажу только что у геймпадов стики так себе в плане разрешения (у ps-ных помойму всего 255 значений и то расположены не равномерно, у аппы грубо говоря 1000 значений, расположеных примерно равномерно)… ну да ладно =) удачно полетать на кнопках с первого раза, присылайте фотки разрушений и порезаных друзей в соседнюю тему

Dmitry_DM
Covax:

Так, объясните модератору для чего создан этот топик?

  1. спросить конфигруацию (моторы, регули, батарейки), поставить в эту ардуину multiwii - удаляю как дубль существующих тем, где можно спросить
  2. написать свою систему стабилизации на ардуине с этим набором датчиков, отличную от multowii? ok, тогда в нем обсуждается только код и формулы расчета, а не конкретные комплектующие

так я и спрашивал конкретный вопрос: как происходит передача команд с пульта для того что бы смоделировать их без пульта на ПК, а тут пытаются убедить, что это нерационально, и смысла в этом нет

SovGVD
Dmitry_DM:

как происходит передача команд с пульта для того что бы смоделировать их без пульта на ПК

немного не понятный вопрос, но видимо вопрос про PWM/ШИМ, о которой выше писал arduino.cc/en/Tutorial/PWM

Dmitry_DM
SovGVD:

PWM/ШИМ

вот, это уже ближе к теме, получается, что на ESC посылают значение от 0 до 255, да?
раз так то, в формуле U = K * ( Err + (1/Ti)*Int + Td*dErr) значение переменной U равно от 0 до 255 соответственно?
и, например, если я хочу послать 75% газа, то я должен слать на 2 ESC analogWrite(191), а на остальные 2 analogWrite(64), я правильно понял смысл?

…кстати выше писал вопрос про эту формулу, никто не ответил, продолжая говорить, что это бесполезно

SovGVD
Dmitry_DM:

получается, что на ESC посылают значение от 0 до 255, да?

если очень грубо подходить к этому то да, но все же если есть желание написать свою прошивку со всеми плюшками, стоит узнать что такое ШИМ не на уровне analogWrite(191), да и это далеко не самая затейливая штука о которой придется узнать по пути велосипедостроения

SergDoc
Dmitry_DM:

ага, здоровую махину, за кучу долларов? нет, спасибо, так как AVR не хватило, мы уже купили Arduino DUE, на котором благополучно располагается ARM 32bit и раз уж так все пошло, то работать будем или с таким кодом, или с таким

–  ARM
®
 Cortex
®
-M3 revision 2.0 running at up to 84 MHz
–  Memory Protection Unit (MPU)
–Thumb
®
-2 instruction set
–  24-bit SysTick Counter
–  Nested Vector Interrupt Controller
•
Memories
–
From 256 to 512 Kbytes embedded Flash, 128-
bit wide access, memory accelerator, dual bank
–  From 32 to 100 Kbytes embedded SRAM with dual banks
–  16 Kbytes ROM with embedded bootloader routines (UART, USB) and IAP routines
–  Static Memory Controller (SMC):
SRAM, NOR, NAND support. NAND Flash
controller with 4-kbyt
e RAM buffer and ECC

ну и так далее…
не интересно…
купите вот эту малышку и будет всё тоже самое, и wii и ARM -CORTEX M3… и японское и тема есть соответствующая rcopen.com/forum/f123/topic267086
и среда не кривая и неудобная arduino, а Keil или eclipse с отладкой через jtag
так что всё придумано до нас…

Dmitry_DM:

вот, это уже ближе к теме, получается, что на ESC посылают значение от 0 до 255, да? раз так то, в формуле U = K * ( Err + (1/Ti)*Int + Td*dErr) значение переменной U равно от 0 до 255 соответственно? и, например, если я хочу послать 75% газа, то я должен слать на 2 ESC analogWrite(191), а на остальные 2 analogWrite(64), я правильно понял смысл?

если не понимаете что за формула - забейте на проект 😦