Стабилизированная по двум осям платформа для фото/видеосъемки в условиях сильной качки
Задачу сделать такую платформу мне подкинул мой шеф в качестве упражнения по зарабатыванию денег головой. Денег не заработал, но интересно было… Итак, необходимо обеспечить стабильность малогабаритной и легкой видеокамеры типа видеорегистратора, установленной на легковом автомобиле. Сначала решил поискать готовые решения в интернете, но нашел только серьезные платформы авиационного назначения без ценника: [1], [2], [3], [4]. А также видеоролик про создание системы активной стабилизации радиоуправляемой авиамодели и про реинженеринг-адаптацию игрового манипулятора Nintendo для управления веб-камерой с помощью авиамодельных сервоприводов.
На основе этих идей и стал сочинять систему. По результатам одновременного сочинительства головой и руками теперь могу разделить решение задачи на части:
- Относительно медленные колебания с частотой, близкой к собственной частоте подвески легкового автомобиля, но большой амплитуды — и есть главная цель компенсации. Эти колебания нужно компенсировать активным или пассивным гироскопом, т. к. необходимы большие угловые перемещения платформы на угол ±5..15 градусов (максимум), когда авто перекатывается с борта на борт после несимметричного наезда на неровность типа «лежачего полицейского». При такой качке нестабилизированная длиннофокусная камера (с малым углом поля зрения), смотрящая вбок, из-за качки может «видеть» смещение картинки на величину больше размера кадра, поэтому обычная для видеокамер система электронной стабилизации изображения, основанная на избыточности матрицы, не справится с задачей стабилизации. Единственная возможность — поворачивать всю камеру или сильно двигать сенсор внутри камеры или группу линз внутри объектива.
- Компенсацию более высокочастотной вибрации оставил на откуп системе активной стабилизации, встроенной в камеру, которая настроена на «шевелёнку» рук человека и имеется во всех фото/видеокамерах. Хотя, конечно, необходима программная адаптация фильтров этой системы к условиям установки на авто. Еще более высокочастотную вибрацию от двигателя и трансмиссии решил даже не пытаться компенсировать, т. к., оказывается, человек — животное очень капризное, и, стремясь повысить уровень комфорта, разработчики легковых автомобилей свели вибрации корпуса к приемлемому для съемки уровню. Ну а постановка дополнительных демпферов между платформой и корпусом авто всегда может дополнительно снизить опасность влияния этого вида вибрации.
- Самую низкочастотную составляющую качки, связанную с изменением наклона всего дорожного полотна (езда по горному серпантину, езда по холмам), решил учитывать и компенсировать с помощью трехосевого акселерометра с большим периодом осреднения его показаний для исключения влияния тряски.
Заманчивую идею решить задачу №1 с помощью классического карданного пассивного гироскопа пришлось отбросить в связи с трудностью решения проблемы медленного, но верного ухода «нуля» такой системы. Пришлось бы делать много подвижных соединений электрических проводов приводов моторов, да и просто не хотелось связываться с точной механикой. Что-то слышав про твердотельные гироскопы и умение планшетов, телефонов и других гаджетов определять ускорение и угол наклона, решил пошерстить интернет и — о чудо! — нашел [5] и [6]. Оказывается, прогресс шагнул очень далеко, и теперь есть дешевые твердотельные трехосевые акселерометры, микросхемы размером в несколько миллиметров, способные измерять вектор ускорения, а также полноценные измерители угловых скоростей — гироскопы! Есть и более продвинутые модели с цифровым интерфейсом ([7]), с полным набором датчиков (трехосевой гироскоп, трехосевой акселерометр и магнитный компас) и процессором обработки первичных данных, причем всё это счастье весит без проводов 7 граммов!
Технические характеристики акселерометра | |
Напряжение питания | 2,2—16,0 В «VIN» |
Встроенный блок питания 3,3 В с выходом до 50 мА «3V3» | |
Пределы измерения ускорения | с меткой «черный крест»: ±1,5g/±6,0g (±1,5g — по умолчанию, ±6,0g выбирается соединением «GSEL» с «3V3») |
с меткой «красный крест»: ±3g/±11g | |
Чувствительность для платы MMA7361L «черный крест» | при диапазоне ±1,5g: 800 мВ/g |
при диапазоне ±6,0g: 206 мВ/g («GSEL»=«3V3») | |
Чувствительность для платы MMA7341L «красный крест» | при диапазоне ±3g: 440 мВ/g |
при диапазоне ±11g: 118 мВ/g («GSEL»=«3V3») | |
3 аналоговых выхода («X»,«Y»,«Z»), сцентрированных на половину напряжения «3V3» и диапазоном выхода от 0 В до уровня выхода «3V3» 3,3 В с выходом до 50 мА «3V3» | |
Дискретный выход «свободное падение» («0G»=high, когда aX=aY=aZ=0) | |
Размеры микроплаты | 12×23×2,3 мм |
Технические характеристики гиродатчика | |
Напряжение питания | до 16 В «VIN» |
Встроенный блок питания 3,3 В с выходом до 50 мА «3.3V» | |
Потребляемый микросхемой ток | ≈7 мА |
2 аналоговых выхода («X»,«Y»), сцентрированных относительно опоры «Vref» Уровни аналоговых выходов «X» и «Y» «абсолютные», т. е. не пропорциональны значению напряжения на выходе «3.3V», и при состоянии покоя гиродатчика на выходах «X» и «Y» всегда должно быть напряжение «Vref», т. е. ≈1,23 В | |
Пределы измерения угловой скорости | с меткой «черный крест»: ±100°/с на выходах «X» и «Y» ±400°/с на выходах «4X» и «4Y» |
с меткой «красный крест»: ±500°/с на выходах «X» и «Y» ±2000°/с на выходах «4X» и «4Y» | |
Чувствительность («абсолютная») | с меткой «черный крест»: 2,5 мВ/(°/с) на выходах «X» и «Y» 10 мВ/(°/с) на выходах «4X» и «4Y» |
Встроенный фильтр низких частот | диапазон пропускания — 0..140 Гц |
Размеры микроплаты | 12×25×3 мм |
Эти устройства, в отличие от более дорогих и сложных лазерных старших собратьев, работают на принципах, максимально близких к работе нашего вестибулярного аппарата. «Интересны и другие системы на основе МЭМС-акселерометров, например гироскопы. Одно такое устройство имеет никелевое кольцо шириной около 6 мкм и внешним диаметром 1 мм, изготовленное на кремниевой основе. Кольцо крепится на подложке с помощью полукруглых подпорок, сходящихся в его центре. По внешнему диаметру кольца расположены электроды. На половину из них подают постоянное смещение, которое при вращении вызывает вибрацию кольца. Лепесток вибрации располагается по внутренней окружности кольца. Его амплитуду и, следовательно, скорость вращения определяют по величине изменения емкости конденсаторов, формируемых другими электродами, расположенными между питающими контактами. Разрешение таких устройств — 0,01 градус/с в полосе 10 Гц». [8]
Для ознакомления с новыми MEMS-технологиями я выбрал варианты двухосевого гироскопа и трехосевого акселерометра, адаптированные друзьями технологии Arduino для применения трясущимися руками большого паяльника. Производители этих плат так и пишут в сопроводиловке, что микросхема установлена на миниатюрную плату и снабжена своим стабильным источником питания для облегчения интеграции в любительские системы. Далее всё как обычно: изучение даташитов и привязка к понравившемуся мозгу-микроконтроллеру STM32F103. Понятно, что в качестве управляющего микроконтроллера можно использовать любой из приглянувшихся современных МК.
Плата двухосевого гироскопа со всеми выводами показана на рис. 1 и на рис. 5. Питание на нее 5 В «Vin» подается от того же блока питания, которым питался МК. Два аналоговых выхода гироскопа «X» и «Y», несущих информацию о скорости вращения платы вокруг осей OX и OY, соединяются с условными входами АЦП МК «Vox» и «Voy» (рис. 5). Т. к. выходы «X» и «Y» однополярные, то состоянию покоя гироскопа соответствует некоторое среднее значение выходного сигнала (≈1,23 В). Поэтому помимо информационных сигналов используется еще и фактическое значение опорного напряжения («Vref», рис. 1 и 5), поданное на третий вход АЦП МК для программного учета дрейфа. Также обязательно надо соединить землю гироскопа «GND» и землю каналов АЦП МК. В ходе отладки программы МК оказалось, что состояние покоя гироскопа на выходах «Х» и «Y» соответствует существенно различным потенциалам, отличным от заявленного 1,23 В, что неприятно и требует учета свойств каждого экземпляра гироскопа при программировании. Обращаю ваше внимание на особенность микросхемы этого гироскопа: ее аналоговые выходы являются абсолютными, т. е. не масштабируются в зависимости от уровня напряжения на входе «3.3V» (т. к. есть дополнительный встроенный блок стабилизации питания внутри самой микросхемы). Таким образом, значения напряжений на выходах в зависимости от скоростей вращения гиродатчика должны вычисляться как:
X[В] = VREF + SO×VOX,
Y[В] = VREF + SO×VOY,
где SO — абсолютная чувствительность в единицах [В/(°/с)], а VOX и VOY — скорости вращения гиродатчика вокруг соответствующих осей в единицах [°/с]
В качестве исполнительных механизмов привода платформы я, как только отказался от пассивного гироскопа, сразу же решил использовать авиамодельные рулевые машинки. Критериями выбора машинок для первого опытного варианта системы были:
- быстродействие
- мощность
- низкая стоимость в ущерб водозащищенности
|
В итоге я выбрал цифровые машинки с моторами с полым ротором, применяющиеся для привода механизма управления шагом винта на радиоуправляемых вертолетах (рис. 2, [9]). К этой машинке прилагается внушительный набор пластиковых качалок, однако было бы лучше иметь одну, но металлическую. Я предполагал,что для обеспечения независимого управления положением платформы по двум осям придется делать карданный шарнир самому, но совершенно случайно на сайте любителей робототехники нашел уже готовый, хоть и хлюпенький, карданный шарнир, специально адаптированный к постановке в него двух рулевых машинок. Этот шарнир (рис. 3, [10]) используется для изготовления кистевого сустава робота и прекрасно подошел для моих целей (рис. 4), тем более что под рукой нашелся микроподшипник, идеально подошедший для поддержки консольной части шарнира (в моем наборе не оказалось подшипника, видного на рис. 3).
/* Фрагмент настройки последовательной выборки для 6 каналов первого из двух модулей АЦП МК STM32F103: */ /* ADC1 configuration ——————————————————*/ /* ADC1 regular channels configuration */ ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_55Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 2, ADC_SampleTime_55Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 3, ADC_SampleTime_55Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 4, ADC_SampleTime_55Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 5, ADC_SampleTime_55Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_15, 6, ADC_SampleTime_55Cycles5); ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = ENABLE; ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 6; ADC_Init(ADC1, &ADC_InitStructure); /* Процедура обработки прерывания по окончанию преобразования 6 каналов АЦП1: */ /* Процедура обработки прерывания от таймера — 300 раз в секунду для выработки управляющих воздействий: */ /*Аналогично для второй оси:*/ |
Описанная система довольно легко была доведена до работоспособного состояния, потому что сразу же было решено датчики устанавливать непосредственно на авто, а не на камере, что позволило совсем избавиться от решения проблем с положительной обратной связью. Вроде, естественным решением было бы установить датчики прямо на камере и решать более общую задачу возвращения платформы с датчиками в состояние покоя. Тогда корректирующие воздействия напрямую получаются из текущих показаний датчиков. Получилась бы аналогия человеческой системы поддержания тела в равновесии, когда мы просто стоим на двух ногах, например, в движущемся вагоне поезда метро. Но такая задачка будет, пожалуй, на порядок сложнее описанной из-за самовозбуждения колебаний в системе датчик—привод. На первом этапе опытов с акселерометром я попробовал прижать акселерометр прямо к машинке — и сразу же заработал самоподдерживающиеся колебания привода, который своими рывками повторно возбуждал акселерометр. Такой же опыт с гиродатчиком дал более обнадеживающий результат: возбудить самоподдерживающиеся колебания системы удалось только один раз, и то при промежуточном уровне разряда батарей.
Испытания
Для полевых испытаний я установил платформу с приводами и веб-камерой на одолженный у друга автомобильный держатель с присоской, слегка его разобрав (рис. 4). Чтобы не возиться с наружной установкой камеры, решили прикрепить ее изнутри авто на боковое стекло задней двери и направили вбок через салон авто так, чтобы в поле зрения камеры попадала рама окна задней двери и пейзаж за ней. Такая установка камеры позволила фиксировать, насколько хорошо камера держит горизонт. На записанных видеороликах видно, что при включенном стабилизаторе изображение пейзажа за окном вполне стабильно, а рамка двери прыгает в кадре — значит, стабилизатор работает.
По результатам испытаний возникли следующие мысли:
- Для применений такого стабилизатора на автомобиле вполне достаточно хода привода ±5°, а у меня из-за прямого привода от машинок получался ход ±60°.
- А вот шаг изменения угла привода хотелось бы иметь поменьше, что возможно, если использовать машинки с меньшим угловым ходом (с бо́льшим передаточным отношением редуктора) или если добавить рычажный понижающий элемент, озаботившись, конечно, пожирателем люфтов.
- Получившаяся система больше подходит не для авто, а для различных видов экстремальной съемки, которая требует больших углов привода: нашлемная система лыжника, мотогонщика и т. д., система стабилизации камеры для самых маленьких беспилотных летательных аппаратов, которые очень подвержены влиянию порывов ветра.
- Использованная плата двухосевого гироскопа прямо просится в систему активной стабилизации высокоманевренного беспилотного летательного аппарата самолетного типа, который при условии достаточной тяговооруженности может успешно противостоять самым сильным порывам ветра, поддерживая неизменными углы крена, тангажа и курса, что очень важно для картографической аэрофотосъемки, да и для удержания объекта наблюдения в центре кадра.
Благодарности:
Тимофею Киянскому за интересное задание и полевые испытания;
Андрею Тарасову за «болванку» и помощь при программировании разработанного им удобного MCU32;
Максиму Вальбе за держатель с присоской, оторванный от любимого авто;
Владимиру Родионову за поддержку и добрую помощь в написании статьи.
Источник