ПИД регулятор на Ардуино

Введение

Первая информация о квадрокоптерах начала появляться в начале 20го столетия.
Первый функциональный quadracopter был построен в 1920 году Этьеном Омишеном. Сначала были созданы устройства,
которые смогли бы поднять вес человеческого тела. На сегодняшний день главным трэндом является создание небольшого беспилотного квадрокоптера.

В данной статье рассматриваются впросы о создании квадрокоптера, который был построен в сотрудничестве с моим коллегой Ing. Pavel Rozsival.
Также рассматривается принцип управления, вопрос об устойчивости и возможности использования квадрокоптера для многих целей.

Аннотация

Pavel Chmelar — Создание и управление квадрокоптера. Статья о построении квадрокоптера, его регулировании. Рассмотрены все аспекты создания данного летательного аппарата: ориентация в пространстве, регулирование, подбор коэффициентов фильтра и контроллеров.

Бортовая электроника

Основной компонент, который мы разрабатывали самостоятельно, — плата стабилизации. Изначально она была основана на платформе Arduino Uno, потом заменили на более мощную Due, что позволило увеличить частоту ПИД-регуляторов с 40Гц до 66.(6)Гц.

Пропеллеры коптера приводятся в движение компактными бесколлекторными двигателями в связке со стандартными контроллерами оборотов — ESC. Мы используем ESC с изменённой прошивкой.

Для питания всей системы используется литий-полимерный аккумулятор (3S). Из соображений безопасности мы решили сделать систему мониторинга напряжения на аккумуляторе. В штатном режиме использования аккумуляторов система ведёт себя достаточно стабильно. Однако на начальных этапах работы мы наблюдали эффекты, вызванные неоптимальным использованием батарей:

  • Вздувшиеся аккумуляторы. Причина в перезаряде и длительном хранении разряженных аккумуляторов. Производители рекомендуют не разряжать силовые аккумуляторы ниже значения 3,3В на каждую банку батареи, что в нашем случае даёт минимальное допустимое напряжение в 9,9В.
  • Выключение моторов при низком напряжении. Это особенность реакции большинства прошивок ESC на низкое напряжение, которая может привести к серьёзной аварии — в первый момент выключается только один мотор, остальные продолжают работать.

Для наших целей ESC было решено перепрограммировать. Благодаря использованию прошивки tgy (от SimonK) мы добились уменьшения задержки системы на пути от центрального контроллера до двигателей. В результате компоненты ПИД и угловая скорость стали более синусоидальными, а поведение всей системы приблизилось к поведению математической модели.

Для измерения динамических параметров используются следующие датчики:

  • 6-осевой акселерометр-гироскоп InvenSense MPU-6050
  • 3-осевой компас Honeywell HMC5883L

Воспроизводимость результатов

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

Грабли

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

С одной стороны, существует минимальная мощность, которую уменьшить нельзя, или моторы просто остановятся. С другой, уменьшение мощности может быть необходимо для правильной работы алгоритма. Если мощность (throttle) уменьшить слишком сильно, ПИД может «зашкаливать» в нижнюю сторону. Чтобы решить эту проблему, мы ограничиваем доступные пилоту мощности.

ПИД регулятор на Ардуино
Другая опасность — влияние побочных вибраций от моторов на ПИД регулятор на АрдуиноПИД регулятор на Ардуино

Двигатели и драйвера управления ими

При решении задачи стабилизации, управления двигателем, передачи данных требуется большие ресурсы центрального микроконтроллера (MCU).
В данном случае используется ARM Cortex-M3, являющийся 32-х битным микроконтроллером.Структурная схема подключения одного двигателя приведена ниже.

Квадрокоптеру необходима относительно высокая тяга двигателя. Для этих целей хорошо подходят бесколлекторные двигатели, управляющиеся с помощью широтно-импульсной модуляции (ШИМ/PWM).
Функция генерации ШИМ импульсовдля управления двигателями перенесена на драйвера двигателей (ESC – Electronics Speed Control).

Для успешного управления, необходимо знать положение ротора в каждый момент времени. Часто двигатели уже имеют встроенные датчики, дающие полную картину о положении ротора, но это далеко не правило, а скорее исключение.
Зачастую положение ротора определяют посылая на обмотки двигателя высокочастотный импульс и оценивается их обратное индуцированное отражение, которое зависит от положения магнита находящегося ближе всего к катушке.

Преимуществом такого решения является низкая цена на такой двигатель (без датчика положения), меньшее количество проводов (у двигателей с датчиками положения их пять).

Для полетов также хорошо подходят outrunner двигатели (вид бесколлекторных). Они имеют более выскоий крутящий момент.
Двигатели переменного тока на 30-50% легче двигателей постоянного тока с теми же параметрами и имеют больший КПД.
Также лучше их показатели крутящего момента.

Единственное преимущество двигателей постоянного тока проявляется на максимальных оборотах.
но хорошие моторы переменного тока используются в квадрокоптерах лишь на 20% от их возможностей. Поэтому рекомендуется использовать их.
Все это позволяет строить легкие модели с большим временем автономного полёта.

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

Действие второе. в котором рассказывается про предпосылки для автоматизации и проблемные рутины в строительстве

Исаак Ньютон:
— От флюенции возьму флюксию и обратно.
Лейбниц:
— Могу делать то же самое!

Идея создания Программы родилась спонтанно, после 3-х закрытых объектов в 2021году ПАО «Транснефть». Помимо сбора и компоновки информации большой блок времени отнимали задачи, связанные с банальным заполнением документов по шаблону, среди которых преобладали Акты входного контроля и Акты освидетельствования скрытых работ.

Особенно много времени уходило на проверки в случае описок или различного рода неточностей. Т.к. если они выявлялись, то приходилось заново открывать и проверять такие акты. Иногда, как в ситуации в 2021году, когда Ростехнадзор поменял форму актов скрытых работ, их счет шел на десятки.

Самой простой и пригодной из доступных для этого является MS Office с макросами VBA. Учитывая тот факт, что в 90-е годы я в школе ударно изучал QBasic 4.5 и Borland Pascal 7.0, то выбор платформы оказался более чем очевиден. Пробелы в синтаксисе помог закрыть Гугл.

1. Самое главное и без чего не имело все дальнейшее смысл это без наглядности и удобства в работе. Поэтому для варианта с экспортом в Excel был выбран путь перебора текста в ячейках с целью поиска комбинаций текстовых маркеров, которые априори не встречаются в русскоязычных регламентных формах актов, с последующей авто подстановкой значений из таблицы.

(Например, f1, d3, b8 и т.д. и т.п.) Для того что бы не пришлось перебирать всю матрицу я ввел упрощение, при создании шаблона если в первой ячейке за областью печати располагается символ арабской единицы, то только в этом случае макрос ищет текст во всех ячейках этой строки. Позднее я решил вопрос как получить в макрос диапазон ячеек, отправляемых на печать.

В случае с экспортом в World тут все гораздо проще – Закладки и ссылки на содержимое закладок, при повторном упоминании содержимого в тексте.

2. В отличие от многих конкурентов с более проработанными приложениями я пошел дорогой структурирования информации (привет BIM) и наглядного представления данных, а потому, не смотря на то что тот же Access, Visual Studio, 1С и т.п. предоставляет большие возможности и функционал все эти программы грешат тем, что в них нельзя «протянуть» строку или столбец с одинаковыми данными, а переключение между полями ввода требует большей точности при позиционировании (выбор поля через TAB или позиционирование курсора с кликом проигрывает в удобстве перемещению стрелками по ячейкам таблицы, не говоря про то, что копировать ячейками проще, чем из через выделения текста из поля ввода)

Следующий шаг — это формирование логики заполнения данных, т.е.:

А) Данные организаций и участников строительства, а также общие характеристики объекта;

Б) Данные для формирования Актов входного контроля, т.е. в первую очередь определяемся не с работами, а с материалами

В) Затем определяемся с месячно-суточным графиком, в котором делаем привязку не только к сметам (т.е. сперва вводим сметные расценки в Заголовки), а уже затем формируем перечень работ из ВР (Ведомости объемов работ по РД (Рабочей документации)), соблюдая очередность работ. Т.е. алгоритм после проставления в графике объемов работ сам определит, в рамках каждого отчетного периода, какие Акты скрытых работ и в какой последовательности под каким номером, от каких дат необходимо будет оформить.

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

И вот таким образом ПК/ноутбук превращаются из печатной машинки в помощника, который берет часть обязанностей на себя. Т.е. то, что часто многими упускается из виду при создании программ.

3. Но ведь регламентных форм актов сильно больше чем указанных мною выше 2-х шт., пусть они и представляют собой свыше 50% всех актов Исполнительной документации. Значит нужно создать, и это было сделано, аналогичную программу, которая могла бы заполнять таким же образом любой Пользовательский шаблон, а затем такие шаблоны можно было бы импортировать в основную программу, с тем что бы можно было увязывать текущие данные с новыми формами. А раз новые формы, то значит нужна и в меру удобная навигация. Все эти задачи были решены.

И вот теперь такая программа распространяется абсолютно безвозмездно, т.е. даром. Не смотря на долгий срок разработки одним человеком с длительными перерывами в нерабочее время с 2021-го года по 2021-й год, когда появились все эти Алтиусы, Адепты и прочий платный софт той же тематики я хочу сказать следующие слова критики:

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

Смотрите про коптеры:  Как выбрать аккумулятор для квадрокоптера

2. Пользователю, т.е. инженерам-ПТО, нужен такой продукт и помощь, который будет прост, удобен и понятен, а еще по совместительству предложит такую схему работы, ошибок при которой будет меньше, чем без нее и трудоемкость уменьшится.

3. Зачастую люди, которым нужна автоматизация, не могут за нее заплатить, т.к. их оклад не такой уж и большой, а в их опыте даже нет рабочих примеров, когда софт облегчал им рабочую рутины, да еще и уменьшал ИХ КОЛИЧЕСТВО ОШИБОК. В то время как цены на такие программы сравнимы со стоимостью Сметных-комплексов. Но без сметных комплексов очень трудно обойтись, а вот без автоматизации Исполнительной документации – элементарно.

4. Информационную модель BIM в ходе формирования исполнительной документации приходится формировать заново, работать дешифратором Рабочей документации на бумажном носителе, переводить ее в язык цифровых сигналов с тем, чтобы выводить результат в виде оформленных актов на бумажном носителе, но с подписью. Прочувствуйте всю иронию.

Действие первое. в котором рассказывается про предпосылки для автоматизации и проблемные рутины в строительстве

— Ты что делаешь?
— Анекдоты читаю.
— А отчет?
— Час назад уже у тебя на столе лежит.
— … Погоди, тогда почему твой предшественник на его подготовку тратил три часа?
— Послушай, я тоже могу тратить три часа на его подготовку. Если хочешь, я могу читать анекдоты в столовой. Но результат будет тот же.

Структура договорных отношений между участниками строительства #1

Обычно Инвестор нанимает организацию, занимающуюся управлением строительства, она может называться заказчиком. Этот заказчик нанимает проектный институт (лицо, осуществляющее подготовку проектной документации), чтобы тот ему нарисовал проект, бывает, так же нанимает генпроектировщика, а тот нанимает субчиков. Потом играют в тендер (кстати, то же самое может быть и с институтом) и выбирают генподрядчика – это ответственный за строительную площадку (лицо, осуществляющее строительство) и заключает с ним договор. Для заказчика существует только генподрядчик (подрядчик) так как им так легче и удобней работать. Генподрядчик уже без тендера выбирает себе субподрядчиков (лицо, выполняющее работы), обычно по видам работ и заключает с ними договора. Субподрядчик или даже сам генподрядчик так же часто себе набирает субчиков, но уже не официально как бы под своим флагом. Заказчик нанимает технический надзор или сам может выполнять данную функцию (представитель заказчика или технический надзор заказчика). Если объект подпадает под государственный строительный надзор (ГСН), то и следит за всем этим он в виде инспекторов, их уведомляет заказчик о начале строительства, те приезжают со своей инспекцией, пишут замечания и уезжают. Все отношения регулируются договорами и действующим законодательством.

ПИД регулятор на Ардуино

Строительство ведется по рабочим чертежам (заверенных печатью «В производство работ») теми материалами и оборудованием, что договорились, их может поставлять как заказчик с генподрядчиком, так и субподрядчик. Строительство ведется в определенные сроки по графику. Каждый месяц Заказчик платит Подярдчику, а Позрядчик Субподрядчику и т.д. по цепочке, за построенные объемы работ денежку, из которой в т.ч. платится зарплата, а представители Подрядчика/Судподрядчика отчитываются за материалы и оборудование, которые были переданы (все это обговорено в договоре). Проверяет объемы и качество выполненных работ технический надзор, авторский надзор так же может следить за соответствием выполняемых работ по проекту и рассматривает возможность изменений в проекте (если с институтом был подписан на это договор и на опасном производственном объекте он должен быть по любому).

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

По окончанию строительства назначается рабочая комиссия обычно из всех представителей, все проверяют и, если все хорошо, через десять дней приемочная комиссия (обычно из тех же представителей) принимает объект. Раньше была еще государственная приемочная комиссия, но сейчас такая происходит только на бюджетных стройках.

При производстве работ по строительству объекта ведется всевозможная документация, основной и самой сложной частью из которой является исполнительная.

Согласно Википедии

BIM(англ. Building Information Model или Modeling) — информационная модель (или моделирование) зданий и сооружений, под которыми в широком смысле понимают любые объекты инфраструктуры, например инженерные сети (водные, газовые, электрические, канализационные, коммуникационные), дороги, железные дороги, мосты, порты и тоннели и т. д.

Информационное моделирование здания — это подход к возведению, оснащению, эксплуатации и ремонту (а также сносу) здания (к управлению жизненным циклом объекта), который предполагает сбор и комплексную обработку в процессе проектирования всей архитектурно-конструкторской, технологической, экономической и иной информации о здании со всеми её взаимосвязями и зависимостями, когда здание и всё, что имеет к нему отношение, рассматриваются как единый объект.

Трёхмерная модель здания, либо другого строительного объекта, связанная с базой данных, в которой каждому элементу модели можно присвоить все необходимые атрибуты. Особенность такого подхода заключается в том, что строительный объект проектируется фактически как единое целое: изменение какого-либо из его параметров влечёт за собой автоматическое изменение связанных с ним параметров и объектов, вплоть до чертежей, визуализаций, спецификаций и календарного графика.

Что касается документации и информационной модели на стройке и откуда она там берется. Как правило Заказчик передает Подрядчику проект со штампом «В производство работ» на бумажном носителе (очень редко в формате pdf и почти никогда в dwg) для того что бы последний в соответствии с контрактом за оговоренную сумму произвел некоторые работы.

Прораб/мастер/нач.участка заказывает через снабженцев (привет бухгалтерия и 1С) материалы согласно потребностям, проекту и графику производства работ, нанимается техника, она же ремонтируется, под нее покупается ГСМ и прочие расходы связанные с объектом, часть из которых связана с машинами и механизмами, часть с материалами которые будут монтироваться.

Затем на объекте ведутся на бумажном носителе: журнал входного контроля, общий журнал работ и прочие специализированные журналы которые зависят от видов выполняемых работ. К концу каждого операционного цикла подготавливается исполнительная документация, которая представляет из себя акты и схемы выполненных работ (схемы по сути копируют проект, ибо отступление от проекта, без согласования с Заказчиком и контролирующими органами, недопустимо и будет означать лишь проблемы для Подрядчика).

Такие акты и схемы на бумажном носителе подписываются представителями Подрядчика, Заказчика, контролирующих органов и организаций и только после того как пройдет успешная защита составляются финансовые акты (обычно по форме КС-2 и КС-3, но это не обязательно, достаточно к договору приложить свой шаблон), на основании которых в особо упоротых случаях бухгалтерия Заказчика может позволить списать материалы бухгалтерии Подрядчика (помимо актов выполненных работ составляются так же акты входного контроля и все вместе это передается Заказчику) в соответствии со сметными расценками.

Сегодня, в отличие от СССР, прораб/мастер/нач.участка не составляют исполнительную документацию. Это не означает что они не заполняют и не составляют бумаг, просто они другие, больше связаны с непосредственной организации управленческих процессов (открытие и закрытие нарядов, журналы инструктажа, выдачи заданий, заявки, письма и т.п.) объем бумаг достаточно большой и это «нормальная» (в том плане, что распространенная практика) брать в штат сотрудников с высшим (!) инженерным образованием — инженеров ПТО, которые будут заниматься всей остальной документацией, а проще говоря исполнять работу технического секретаря.

(На самом деле порог вхождения в процессию очень низок, т.к. базового школьного курса Черчения достаточно, что бы читать строительные чертежи и даже перерисовывать схемы, конечно потребуется навык работы с Word/Excel/Paint/AutoCAD/Компас, но это не так сложно как может показаться и потому такая специальность утилизирует людей как с профильным образованием, так и с гуманитарным менеджеров/юристов/учителей и т.д. и т.п.)

Как правило рабочее место, которое может быть и удалено (вагончик в поле), оборудовано МФУ, Wi-Fi точкой, раздающей 3G интернет, ноутбуком. В отсутствие сис.админа все это работает… в меру сил и понимания инженера ПТО, который за все это отвечает, который выполняет не только прямые обязанности, но и те от которых не удалось отбрыкаться по разным причинам.

Надо ли говорить, что общая техническая грамотность страдает. Обычно на ноутбуки установлен, хорошо если заботливо, Windows, MS Office, редактор для векторной графики, GIMP, программа оптического распознавания текстов. Такой скудный выбор связан с тем, что з/п и оснащение такого инженера находится в составе Накладных Расходов, а не в статьях Общей Заработной Платы, как в случае, например, рабочих, т.е. разные статьи расценок сметы.

Действие третье. в котором рассказывается о том как кристаллизовалась программа

На стройке самое важное что? График производства работ и ключевые даты на нем (врезка, подключение, начало работ и окончание работ и некоторые другие). На участке ведется ОЖР, в котором записывается вручную что было выполнено за каждый конкретный рабочий день. Но если взять график (Месячно-суточный график) и заполнять его, то мы получим графическое представление, который и легче воспринимается и, затем, легче автоматизируется, служа исходными данными для актов и аналитики.
ПИД регулятор на Ардуино
Рис.1 — Пример Месячно-суточного графика

Смотрите про коптеры:  Сheerson cx 20 - Отличный квадрокоптер за разумные деньги

Теперь думаем дальше, если ввести только один раз и дальше расставить ссылки, на ответственных, описание объекта, контракта и организаций, участников строительства, то это зело упростит Работу. Ввел один раз и далее только развешиваешь ссылки.

Следующий Важный момент в строительстве — это Материалы. Они должны соответствовать проекту и при их приемке осуществляется Входной контроль комиссией с оформлением бумаг (Акт входного контроля и Журнал Входного контроля). Это держим в уме. А дальше большая часть ИД в строительстве составляют Акты скрытых работ или полностью, Акт освидетельствования скрытых работ.

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

Действие четвертое. в котором речь пойдет о макросах vba

Далее пойдут спойлеры с кодом, призванные решить те или иные вопросы/проблемы.

Заполнение шаблонного файла в формате MS Excel

Здесь очень важна наглядность! Очень много проектов встали на абсолютных ссылках, по-этому я изначально решил сделать все универсально. После долгих мытарств я открыл для себя тот факт, что формулой можно получить диапазон ячеек, который будет выводится на печать.

ПИД регулятор на Ардуино
Рис.2 — Пример файла шаблона в формате MS Excel

Здесь в ячейке А1 содержится формула:
=СЦЕПИТЬ(АДРЕС(СТРОКА(Область_печати);СТОЛБЕЦ(Область_печати);1;1);":";АДРЕС(СТРОКА(Область_печати) ЧСТРОК(Область_печати)-1;СТОЛБЕЦ(Область_печати) ЧИСЛСТОЛБ(Область_печати)-1;1;1))
Т.е. мы можем получить область печати, обратившись к переменной, фигурирующей в диспетчере имен. Полученные абсолютные границы печати, которые будут автоматически меняться, если нам придется увеличить или уменьшить область печати. Зачем? Здесь следует сделать отступление.

ПИД регулятор на Ардуино
Рис.3 — Пример листа с хранящимися данными для автоматического заполнения актов.

Дело в том, что мною был выбран способ-маркеров в тексте, т.е. при составлении шаблона маркеры (a1, b0, c7, d8 и т.д. и т.п.) однозначно характеризуют с одной стороны строку, из которой будут браться данные (порядковый номер элемента массива, который автоматически завязан на номер строки), с другой стороны в русскоязычных шаблонах в строительстве абсурдное сочетание букв латиницы с цифрой не используется. А значит это наглядно. После чего обычный перебор текста решает, НО (!)… чем больше ячеек в области печати, тем медленнее будет работать алгоритм. Значит ему надо помочь и подсветить только те строки, в которых априори что-то есть.

Код макроса VBA осуществляющий экспорт в шаблон в формате MS Excel

          With Workbooks.Open(ThisWorkbook.Path   "Шаблоны аддонов"   NameShablonPrimer, ReadOnly:=True)                .Sheets(NameShablonPrimerList).Visible = -1                .Sheets(NameShablonPrimerList).Copy after:=wb.Worksheets(Worksheets.Count)                                Let НачальныйНомерСтрокиВФайле = .Sheets(NameShablonPrimerList).Cells(1, 2)       ' Начальный номер строки в файле шаблона                Let НачальныйНомерСтолбцаВФайле = .Sheets(NameShablonPrimerList).Cells(1, 3)      ' Начальный номер столбца в файле шаблона                Let КонечныйНомерСтрокиВФайле = .Sheets(NameShablonPrimerList).Cells(1, 4)        ' Конечный номер строки в файле шаблона                Let КонечныйНомерСтолбцаВФайле = .Sheets(NameShablonPrimerList).Cells(1, 5)       ' Конечный номер столбца в файле шаблона                                .Close True           End With        End If     End If      Do        ИмяФайла = BDList   " №"                                                                  ' Префикс имени файла        wb.Worksheets(NameShablonPrimerList).Copy after:=Worksheets(Worksheets.Count)        Set новыйЛист = wb.Worksheets(NameShablonPrimerList   " (2)")                For X = НачальныйНомерСтолбцаВФайле To КонечныйНомерСтолбцаВФайле Step 1                  ' Перебираем столбцы в листе Примера формы-шаблона            For Y = НачальныйНомерСтрокиВФайле To КонечныйНомерСтрокиВФайле Step 1                ' Перебираем строк в листе Примера формы-шаблона                If Sheets(новыйЛист.Name).Cells(Y, КонечныйНомерСтолбцаВФайле   1) = 1 Then       ' При наличии спец символа проверяем на совпадении строку                   Let k = CStr(Sheets(новыйЛист.Name).Cells(Y, X))                               ' Ищем только если в ячейке что-то есть                   If k <> "" Then                      For i = 1 To Кол_воЭл_овМассиваДанных Step 1                          ContentString = CStr(Worksheets(BDList   " (2)").Cells(i   1, НомерСтолбца))                          If Len(arrСсылкиДанных(i)) > 1 Then                             If ContentString = "-" Or ContentString = "0" Then ContentString = ""                             Let k = Replace(k, arrСсылкиДанных(i), ContentString)                          End If                      Next i                      новыйЛист.Cells(Y, X) = k                   End If                End If            Next Y        Next X                       For Y = НачальныйНомерСтрокиВФайле To КонечныйНомерСтрокиВФайле Step 1            Sheets(новыйЛист.Name).Cells(Y, КонечныйНомерСтолбцаВФайле   1) = ""        Next Y              
Заполнение шаблонного файла в формате MS Word

вывода в шаблон формата Word, и здесь на самом деле есть 2 способа вывода текста:

1. Это через функционал закладок,

            Rem -= Открываем файл скопированного шаблона по новому пути и заполняем его=-             Set Wapp = CreateObject("word.Application"): Wapp.Visible = False             Set Wd = Wapp.Documents.Open(ИмяФайла)                          NameOfBookmark = arrСсылкиДанных(1)             ContentOfBookmark = Worksheets("Данные для проекта").Cells(3, 3)             On Error Resume Next             UpdateBookmarks Wd, NameOfBookmark, ContentOfBookmark             Dim ContentString As String             For i = 4 To Кол_воЭл_овМассиваДанных Step 1                 If Len(arrСсылкиДанных(i)) > 1 Then                    NameOfBookmark = arrСсылкиДанных(i)                    ContentString = CStr(Worksheets("БД для АОСР (2)").Cells(i, НомерСтолбца))                    If ContentString = "-" Or ContentString = "0" Then ContentString = ""                    ContentOfBookmark = ContentString                    On Error Resume Next                    UpdateBookmarks Wd, NameOfBookmark, ContentOfBookmark                 End If             Next i                           Rem -= Обновляем поля, что бы ссылки в документе Word так же обновились и приняли значение закладок, на которые ссылаются =-             Wd.Fields.Update                           Rem -= Сохраняем и закрываем файл =-             Wd.SaveAs Filename:=ИмяФайла, FileFormat:=wdFormatXMLDocument             Wd.Close False: Set Wd = Nothing
Sub UpdateBookmarks(ByRef Wd, ByVal NameOfBookmark As String, ByVal ContentOfBookmark As Variant)     On Error Resume Next     Dim oRng As Variant     Dim oBm     Set oBm = Wd.Bookmarks     Set oRng = oBm(NameOfBookmark).Range      oRng.Text = ContentOfBookmark     oBm.Add NameOfBookmark, oRng End Sub

Между выводами в файлы форматов Word и Excel есть огромная пропасть, которая заключается в следующем:

Шаблон Excel требует перед использованием настроить отображение под конкретный принтер, т.к. фактическая область печати разнится от модели к модели. Так же перенос строки текста возможен, но только в пределах ячейки/объединенных ячеек. В последнем случае не будте автораздвигания строки, в случае переноса текста. Т.е. Вам вручную придется заранее определит границы области, которые будут содержать текст, который в свою очередь в них еще должен убраться. Зато Вы точно задали границы печати и выводимого текста и уверены, что не съедет информация (но не содержание) с одного листа на другой.

Шаблон Word при настройке автоматически переносит текст на последующую строку, если он не убрался по ширине ячейки/строки, однако этим самым он вызывает непрогнозируемый сдвиг текста по вертикали. Учитывая тот факт, что по требованиям к Исполнительной документации в строительстве ЗАПРЕЩЕНО один акт печатать на 2х и более листах, то это в свою очередь так же рождает проблемы.

https://www.youtube.com/watch?v=1Va1FfYSIts

С проектом можно ознакомиться тут:

Калибровка пид

Для углов ПИД регулятор на АрдуиноПИД регулятор на АрдуиноПИД регулятор на Ардуино

Квадрокоптер

Квадрокоптер (рис.1), это беспилотный летательный объект (БПЛА), который летает с помощью четырех винтов включенных попарно перпендикулярно
(т.е. первая пара противоположных винтов (рис. 2) вращается в одном направлении для поддержания баланса в оси х.

В вопросе о контроле, правильно будет разбить проблемы на три независимые части.
Первая часть представляет собой контроль по оси Х (рис. 2), где важно равновесие на рычаге, вторая часть аналогична первой,
по оси Y (рис. 3). В последней части управляем вращением по оси Z (рис. 1), которое необходимо предотвращать.

Матчасть

Определим невязку — разницу между требуемым и реальным значением некоторой величины:

ПИД регулятор на Ардуино
ПИД регулятор на АрдуиноПИД регулятор на АрдуиноПИД регулятор на АрдуиноПИД регулятор на АрдуиноПИД регулятор на Ардуино
Знак минус говорит о том, что при положительных ПИД регулятор на АрдуиноПИД регулятор на АрдуиноПИД регулятор на АрдуиноПИД регулятор на АрдуиноПИД регулятор на АрдуиноПИД регулятор на АрдуиноПИД регулятор на АрдуиноПИД регулятор на Ардуино
где

Т. е. чем больше пропорциональная составляющая, тем более «резкой» будет реакция на воздействие (больше амплитуда). Чем больше дифференциальная составляющая, тем быстрее будет происходить затухание (больше декремент).

Из модели затухающих колебаний получаем выражение для коэффициента затухания:

Из возможных решений уравнения нам подходит режим, близкий к критическому (граница апериодичности, ПИД регулятор на АрдуиноИнтегральная составляющая устраняет статическую ошибку. Пусть невязка ПИД регулятор на АрдуиноПИД регулятор на АрдуиноПИД регулятор на Ардуино

Более подробный анализ уравнения ПИД-регулятора можно найти в других статьях: раз, два.

Направления для развития

  • Процесс тестирования системы стабилизации можно упростить, используя более совершенный стенд. Верёвочный вариант — скорее одноразовое решение, более подходящим был бы жёсткий карданов подвес с тремя степенями свободы.
  • Существуют методики автоматизации подбора коэффициентов ПИД-регулятора. Например, основанные на двоичном поиске (метод ветвей и границ). В нашем проекте коэффициенты подбирались вручную.
  • Приложение для ПК, используемое для мониторинга и управления, было бы удобнее использовать на планшетном компьютере. В планах портировать приложение на Android или IOS.

Настройка loiter

Если крен и тангаж (наклоны по сторонам квадрокоптера) настроены правильно, GPS и Компас настроенны
правильно и уровень вибрации приемлемый, то настройка Loiter не требуется, но пожалйста посетите страницу полетного режима Loiter для
дополнительной информации по настройкам включая горизонтальную скорость.

Настройка roll/pitch

Параметры Stabilize Roll/Pitch и Rate Roll/Pitch выделеные желтым цветом на снимке управляют отзывчивостью крена и тангажа.

Параметр Rate преобразует желаемую скорость вращения в соответствии с мощностью двигателя является наиболее важным. Наибольшая
информация о настройке их находиться здесь здесь


Параметр Stabilize Roll/Pitch P преобразует нужный угол в требуемую скорость вращения, которая меняется контролем скорости.

  • Чем выше это значение, тем сильнее квадрокоптер реагирует на наклоны по крену и тангажу, более низкое — сделает реагирование более гладким
  • Если установлено слишком большое значение — квадрокоптер будет колебаться по осям крена и тангажа (roll / pitch)
  • Если установлено слишком малое значение — квадрокотпер будет вялым на входящие команды

Более подробная информация по настройке крена и такгажа можно найти в разделе Stabilize Roll/Pitch настройки

Объективный взгляд на общий Roll и Pitch производительность можно увидеть посмотрев график из логов полетного контроллера в ATT сообщениях.
сопоставив значения на графике Roll-In vs Roll и Pitch-In vs Pitch . Оба графика должны следовать друг за другом в режиме Stabilize и в режиме AltHold.


Как альтернативу вы можете попробовать использовать автонастройку Stabilize и Rate c с помощью AutoTune

Настройка yaw (рысканье)

Параметры Stabilize Yaw и Rate Yaw выделены на скриншоте выше оранжевым цветом и отвечают за отклик рысканья (поворот носом).
Редко, когда эти параметры требуют настройки.

Смотрите про коптеры:  Как выбрать квадрокоптер для ребёнка?

Подобно крену и тангажу, если параметры Stabilize Yaw P или Rate Yaw P слишком высокие — нос квадрокоптера будет колебаться, а если он
слишком низкий — квадрокоптер будет не в состоянии поддерживать направление носа.

Как уже упоминалось в разделе режима Stabilize , параметр ACTO_YAW_P отвечает
как быстро вертолет будет вращаться на основе команд рысканья пилотом. По умолчани это 4.5 — то есть скорость вращения
200 градусов в секунду, когда стик рысканья полностью утоплен влево или вправо. Большее значение сделают вращения быстрее.

Настройка в полете

Одиночный параметр может быть настроен в полете с помощью 6-го канала на аппаратуре. Для примера можно настроить
Rate Roll/Pitch P значния , найденые на странице Настройка Rate Roll/Pitch P раздела «настройка в полете».
Пожалуйста посмотрите в ПО Mission Planner в разделе Config/Tuning -> APM Copter PIDS полный список параметров назначаемых на 6-й канал
которые могут быть настроены.

После установки значения на 6-й канал , его показания минимума и максимума должны быть в разумных пределах ( то есть не нулевой , а так же неоправданно большой),
а затем нажмите кнопку «Refresh screen» убедитесь, что путем настройки регулятора 6-го канала параметр правильно обновляется.

Настройка высоты

Параметры связанные с удержанием высоты выделены зеленым цветом на скриншоте выше.

Параметр Altitude Hold P используется для конвертирования ошибок высоты (разница между заданной и фактической высотой)
до набора или снижения желаемой высоты. Чем выше этот коэффициет тем более агресивно пытается поддерживаться эта высота,
если слишком большой коэффициет — это приводит к рывкам дросельной заслонки.

Параметр Throttle Rate (который обычно не требует настройки) преобразует коэффициент подъема или спуска до нужного ускорения вверх или вниз.

Параметры Throttle Accel PID добавляют преобразованые ошибки ускорения (то есть разница между желаемым и фактическим ускорением) на выходе у моторов.
Придерживайтесь соотношению 1 к 2 (P к I) (т.е. I в два раза выше P) , если вы меняете эти параметры.

Смотрите страницу режима удержания высоты (AltHold) для получения дополнительной информации.

О нас

Мы — студенты МФТИ (в своём большинстве), которые в свободное время занимаются проектом на мастерской TechnoWorks. Кроме коптера у нас живут и другие проекты: железные и программные. О них мы расскажем как-нибудь потом. А еще у нас можно придумать и реализовать свою идею (а мы поможем найти людей).

Если есть желание присоединиться к нашей команде, свяжитесь с нами! Мастерская активно расширяется, для новых участников у нас полно творческой и технической работы. И печенек.

Обзор

ПИД регулятор на Ардуино

По умолчанию PID усиления предназначены для квадрокоптеров 3DR , хотя они работают на самых разных рамах.
Тем не менее, что бы получить оптимальную производительность может потребоваться их настройка , которая
может быть сделана через Mission Planner ->

Наиболее важным параметрами являются правые — Rate Roll P (и по умолчанию Rate Pitch P заблокирован с тем же значением).
как обсуждалось здесь

Обычно лучше всего начинать с настройки коэффициента Roll/Pitch P в режиме стабилизиции, затем перейти на настройки
удержания высоты в режиме AltHold , затем Loiter (который часто не нуждается в настройке) и последнее —
настройки производительности полета по навигационным точкам в режиме Auto.

Примечание:Руководство полезной информации с прошивкой ArduCopter версии 2.8.1
настройки этих параметров после версии 2.8.1 очень сильно изменились.

Ориентация в пространстве

Для описания движения квадрокоптера необходимо определить подходящую систему координат.
Для решения большинства проблем, связанных с движением самолетов, существует две системы координат.
Первая система координат – относительно земли и может рассматриваться для анализа движения (инерциальная система координат).

Ориентации самолета часто описывается тремя последовательными поворотами, порядок которых имеет важное значение.
Угловые вращения называются углами Эйлера. Ориентации тела по отношению к неподвижной точке на земле могут быть определены следующим образом:

  • Поворот вокруг оси zb а угол рыскания Ψ
  • Поворот вокруг оси yb а угол тангажа Θ
  • Поворот вокруг оси хb а угол крена φ

Существует и другой путь определения углов, через показания гироскопа:

Данные с гироскопа – угловая скорость. Время Δt – это время между двумя измерениями и из выражения для определения расстояния:

можно рассчитать углы.

Первая авария

Слишком большая дифференциальная составляющая на практике приводит к автоколебаниям, чего не должно быть в теории. Почему? Уберём все составляющие, кроме дифференциальной, и решим уравнение:

ПИД регулятор на АрдуиноПИД регулятор на АрдуиноПИД регулятор на АрдуиноПИД регулятор на АрдуиноПИД регулятор на АрдуиноПИД регулятор на Ардуино
Также результат работы составляющих ПИД приходится ограничивать по модулю. Иначе значение ПИД регулятор на Ардуино

Компромиссом является установка не слишком маленьких коэффициентов в совокупности с введением ограничения сверху на все три составляющие: пропорциональную, интегральную и дифференциальную.

Стоит сказать, что реальная коррекция в почти горизонтальном положении — около 1–2 попугаев процентов мощности моторов (полётная мощность около 60%).

ПИД регулятор на Ардуино
Рассмотрим решение уравнения второго порядка (1), которое в одном из случаев является затухающей синусоидой.

На практике действительно получается что-то похожее (пример справа). Для демонстрации коэффициенты специально ухудшены для увеличения времени затухания. Оригинальную прошивку ESC пришлось заменить, т. к. она вносила существенную задержку, из-за которой математическая модель плохо описывала реальную систему.

ПИД регулятор на Ардуино
Поскольку ПИД регулятор на Ардуино

Полёт коптера с нашей системой стабилизации

лето 2021.

зима 2021.

весна 2021

Программное обеспечение

ПИД регулятор на Ардуино

В качестве динамического датчика мы использовали MPU-6050 из-за его вычислительных возможностей. Встроенный процессор (DMP) способен частично обрабатывать данные с датчиков, что позволяет разгрузить центральный контроллер. Но оказалось, что надёжных библиотек для работы с этим устройством под Arduino не существует.

Решение jrowberg’а привело к проблемам при использовании на сильно загруженном микроконтроллере. Код в примере опирается на синхронность считывания данных. FIFO-буфер датчика, в который записываются посчитанные величины, переполняется в случае несвоевременного считывания.

Поскольку всегда считывается первый элемент из FIFO, то при частичной заполненности появляется задержка между помещением новых данных в FIFO и их обработкой на Arduino. В свою очередь, эта задержка приводит к возникновению автоколебаний. При переполнении буфер приходится очищать:

его размер 1024, что не делится на 42 — размер пакета. Поэтому, когда буфер переполняется, в начале FIFO находится часть какого-то постороннего пакета. Иными словами, начиная с определенного момента структура нарушается: начало FIFO не совпадает с началом пакета, и считать корректные данные невозможно.

Телеметрия

Дистанционное управление реализовано в двух режимах (для обеспечения более гибкого процесса разработки):

  1. С помощью модулей xBee Pro в конфигурации «коптер ↔ ПК».
  2. С помощью выделенной радиочастоты (2.4ГГц) в конфигурации «пульт ДУ ↦ коптер».

Помимо управления через пульт ДУ происходит пересылка критических данных между коптером и ПК в режиме реального времени, для чего используются xBee Pro и приложение собственной разработки (см. скриншот). На компьютере можно видеть значение углов и угловой скорости, напряжение на аккумуляторе, мощность двигателей.

Данные, пересылаемые между коптером и ПК:

  • ПК ↦ Коптер: канал управления (ПК/пульт ДУ), мощность моторов, настройка для включения/выключения стабилизации, коэффициенты ПИД и ограничения;
  • Коптер ↦ ПК: углы, угловая скорость, компоненты ПИД регулятор на Ардуино, ПИД регулятор на Ардуино, ПИД регулятор на Ардуино, данные с джойстика (мощность 3 угла), мощности моторов, напряжение на аккумуляторе.

Благодаря датчику от InvenSense, начальная обработка данных с датчиков происходит на встроенном процессоре (DMP). Мы разгружаем плату стабилизации, которая может использовать в качестве вычислителя даже маломощный AVR-микроконтроллер.

Управление двигателями с помощью шим

Способ управления двигателями переменного тока основан на принципе управления серводвигателями.
Основной сигнал имеет ширину 1мс с периодом 20 мс. После включения ширина управляющего импульса должна быть равна 1мс, что соответствует остановке двигателя (рис. 5 верх).

Если при старте длительность импульса более 1 мс, драйвер не позволит включиться двигателю из соображений безопасности.
Для пуска двигателей нужно длительность импульса 1 мс. Плавное увеличение ширины импульса приводит к увеличению числа оборотов двигателя.
Верхний предел ширины импульса это 2 мс (рис. 5 низ), при этом значении двигатель имеет максимальную производительность.

Непрерывность изменения направления вращения является критическм фактором для стабилизации.
Изменение числа оборотов должно быть плавным, так как это может привести к высоким изменениям выходного значения контроллера, и это может привести к дестабилизации квадрокоптера.

Итоги

Главное достижение — отличная команда энтузиастов, способных работать над сложными робототехническими проектами. Мы верим, что всё дело в творческом подходе, возможности для самореализации, а также бесценном практическом опыте, которого всегда не хватает.

Мы создали новый проект системы стабилизации для мультикоптеров. Сейчас мы можем пилотировать квадрокоптер на открытом пространстве. Такие внешние факторы, как ветер, дождь и снег компенсируются автоматически благодаря ПИД-регулятору.

В настоящий момент мы усовершенствуем то, что сделали, и разрабатываем новые функции автоматизации.

Заключение

Теперь квадрокоптер имеет возможность находиться в устойчивом стостоянии на высоте, но есть еще несколько моментов необходимых для полной стабилизации.
Более точный подбор коэффициентов ПИД-регулятора всегда имеет место быть. Выбор другого регулятора.

В будущем планируется добавить некоторые дополнительные функции управления для осуществления специальных маневров.

Для увеличения функциональности квадрокоптера на его борт могут быть добавлены различные датчики, нарпимер высотомер или камера. Квадрокоптер отлично подходит для разведки мест труднодоступных человеку. С дополнительными устройствами можно задавтаь траекторию полета и проводить исследования местности.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector