Аэрофотосъемка с беспилотного вертолета

Крепление камеры

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

Теперь переходим собственно к съемке и займемся на базе простых моделей анализом плюсов и минусов разных решений. Стандартные решения типа проекта Multiwii предлагает программное решение для реализации гиростабилизированного подвеса камеры. Однако это решение полезно и важно для видеосъемки. Для создания сферических панорам стабилизация является лишней, а из готового решения полезным является только возможность управления углом тангажа камеры. В принципе этого достаточно для получения сферической панорамы. Так, нижеприведенная панорама снята именно с помощью такой простейшей конструкции.

река Десна
При щелчке мышью по фотографии можно увидеть сферическую панораму, представленную с помощью программы SaladoPlayer

Цейтраферная съемка камерой GoPro HERO3: Black Edition была сделана за счет вращения вертолета вокруг своей оси. Конструкция использованная для этой съемки приведена на фотографии ниже. Она компактна, имеет простую посадочную платформу и использует немодифицированное программное обеспечение проекта MultiWii. В этой модели еще не используется GPS для удержания вертолета в точке съемки. Оказалось, что мой уровень пилотажа на тот момент достаточен, чтобы удержать вертолет на месте без вращения, но поворот вокруг оси приводит к значительным колебаниям высоты, что создает значительные трудности при сшивке качественной панорамы. Еще одним минусом данной конструкции оказалась плохая виброразвязка камеры от несущей рамы.

фото

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

фото

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

фото

Для управления вращением камеры была модифицирована та часть кода программы MultiWii, которая отвечала за рулевую машинку, предназначенную для нажима на кнопку спуска затвора. Поскольку время полета с 3х элементным аккумулятором LI-PO емкостью 2600 мАчас около 7 минут, то с картой памяти 32 ГБ есть возможность осуществлять съемку с интервалом в 1 секунду в течение всего полета и, следовательно, нет необходимости управлять съемкой. При не очень больших дистанциях можно включать камеру и управлять съемкой через встроенный в нее WiFi. Малое время полета практически исключает сценарий, при котором осуществляется и съемка сферической панорамы, и видеосъемка с гироскопической стабилизацией камеры. Поэтому может быть использован двухосный подвес, у которого направление одной из осей может быть на земле изменено на 90 градусов. Ниже приведена фотография подвеса для стабилизированной видеосъемки, использующая те же рулевые машинки, но используется первая из них не для вращения камеры через редуктор на 360 градусов, а напрямую для компенсации крена в полете.

фото

Именно с этим подвесом снят ролик, иллюстрирующий съемку клумбы, а сама сферическая панорама снята с предыдущим подвесом с вертикальной осью.

Клумба

Аналогичный подвес использовался и для съемки панорам реки Осётр. Для перехода с первой панорамы на следующую щелкните мышью по изображению вертолета в небе. Щелчок по красному шару позволяет увидеть панораму с земли, снятую камерой Sony NEX-5 с конвертером «Рыбий глаз» Sony VCL-ECF1 при помощи установки, описанной в статьях Автоматизация съемки сферических панорам с помощью камеры Sony NEX-5, Управление съемкой с помощью телефона и Фотокубики 2012.

река Осётр

Все вышеприведенные панорамы сняты под управлением программой MultiWii 2.2 с кодом, модифицированным для управления вращением камеры на 360 градусов. Но поскольку уже вышла программа MultiWii 2.3, то здесь я приведу модификацию кода именно для нее. Открываем файл Output.cpp и вносим следующие изменения:

static uint8_t panState = 0;
// переменная определяющая поворот камеры по тангажу.
// 0 - положение задано ручкой на пульте. 
// 1 - камера смотрит вниз, 2 - на горизонт
       ...
/***************************************************************************/
/************************** Cam stabilize Servos ***************************/
 #if defined(SERVO_TILT)
       if (panState == 2) {
       servo[0] = 1570;
       }
       else if (panState == 1){
       servo[0] = 1070;
       }
       else {
       servo[0] = get_middle(0);
       }
       servo[1] = get_middle(1);
   
   
       if (rcOptions[BOXCAMSTAB]) {
       servo[0] += ((int32_t)conf.servoConf[0].rate * att.angle[PITCH]) /50L;
       servo[1] += ((int32_t)conf.servoConf[1].rate * att.angle[ROLL])  /50L;
       }
       #endif
       ...

/****************           Cam trigger Servo             ******************/
#if defined(CAMTRIG)

static uint8_t camCycle = 0;
static uint8_t camState = 0;
static uint32_t camTime = 0;
static uint32_t ctLow;
if (camCycle==1) {

if (camState == 0) {
servo[2] = 1500;
camState = 1;
panState = 2;
camTime = millis();
} else if (camState == 1) {
if ( (millis() - camTime) > CAM_TIME_HIGH ) {
servo[2] = 1630;
camState = 2;
camTime = millis();
}
} else if (camState == 2) {
if ( (millis() - camTime) > CAM_TIME_HIGH ) {
servo[2] = 1760;
camState = 3;
camTime = millis();
}
} else if (camState == 3) {
if ( (millis() - camTime) > CAM_TIME_HIGH ) {
servo[2] = 1890;
camState = 4;
camTime = millis();
}
} else if (camState == 4) {
if ( (millis() - camTime) > CAM_TIME_HIGH ) {
servo[2] = 2000;
camState = 5;
camTime = millis();
}
} else if (camState == 5) {
if ( (millis() - camTime) > CAM_TIME_HIGH ) {
panState = 0;
servo[2] = 2000;
camState = 6;
camTime = millis();
}

} else if (camState == 6) {
if ( (millis() - camTime) > CAM_TIME_HIGH ) {
servo[2] = 1860;
camState = 7;
camTime = millis();
}
} else if (camState == 7) {
if ( (millis() - camTime) > CAM_TIME_HIGH ) {
servo[2] = 1720;
camState = 8;
camTime = millis();
}
} else if (camState == 8) {
if ( (millis() - camTime) > CAM_TIME_HIGH ) {
servo[2] = 1580;
camState = 9;
camTime = millis();
}
} else if (camState == 9) {
if ( (millis() - camTime) > CAM_TIME_HIGH ) {
servo[2] = 1440;
camState = 10;
camTime = millis();
}
} else if (camState == 10) {
if ( (millis() - camTime) > CAM_TIME_HIGH ) {
servo[2] = 1300;
camState = 11;
camTime = millis();
}
} else if (camState == 11) {
if ( (millis() - camTime) > CAM_TIME_HIGH ) {
servo[2] = 1160;
camState = 12;
camTime = millis();
}
} else if (camState == 12) {
if ( (millis() - camTime) > CAM_TIME_HIGH ) {
servo[2] = 1020;
camState = 13;
camTime = millis();
}
} else if (camState == 13) {
if ( (millis() - camTime) > CAM_TIME_HIGH ) {
servo[2] = 900;
camState = 14;
camTime = millis();
}
} else if (camState == 14) {
if ( (millis() - camTime) > CAM_TIME_HIGH ) {
panState = 1;
servo[2] = 900;
camState = 15;
camTime = millis();
}
} else if (camState == 15) {
if ( (millis() - camTime) > CAM_TIME_HIGH ) {
panState = 2;
servo[2] = 900;
camState = 16;
camTime = millis();
}
} else if (camState == 16) {
if ( (millis() - camTime) > CAM_TIME_HIGH ) {
servo[2] = 1040;
camState = 17;
camTime = millis();
}
} else if (camState == 17) {
if ( (millis() - camTime) > CAM_TIME_HIGH ) {
servo[2] = 1280;
camState = 18;
camTime = millis();
}
} else if (camState == 18) {
if ( (millis() - camTime) > CAM_TIME_HIGH ) {
servo[2] = 1420;
camState = 19;
camTime = millis();
}
} else if (camState == 19) {
if ( (millis() - camTime) > CAM_TIME_HIGH ) {
panState = 1;
servo[2] = get_middle(2);
camState = 20;
camTime = millis();
}

} else { //camState ==20
if ( (millis() - camTime) > CAM_TIME_HIGH ) {
camState = 0;
camCycle = 0;
panState = 0;
}
}
}
if (rcOptions[BOXCAMTRIG]) camCycle=1;
//servo[2] =(camState==1) ? conf.servoConf[2].max : conf.servoConf[2].min;
//servo[2] = (servo[2]-1500)*SERVODIR(2,1)+1500;
#endif

В файле config.h раскомментируем строки #define SERVO_TILT и #define CAMTRIG

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

фото

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

фото
фото
фото

Камера повернута относительно рамы при съемке сферической панорамы. Телевизионная картинка позволяет в реальном времени, в отличие от WiFi, контролировать процесс съемки. Телеметрия на экране отражает углы поворота рамы вертолета, а не камеры.

Посадочные опоры выполнены из стеклопластиковых трубок для спиннинга. Они жестко закреплены на 6 мм дюралевой оси, проходящей через шарикоподшипник, запрессованный в уголок, крепящийся к раме. На оси закреплена шестерня, сопряженная с шестерней на валу рулевой машинки. В последней конструкции используется рулевая машинка с углом поворота 180°. В этом случае число зубьев относится как 2:1. Первоначально использовалась машинка с углом поворота 60°, что требовало большей шестерни на ее валу и соответственно большего усилия. При горизонтальном полете необходимое усилие для поворота мало и не требует мощной машинки, однако при взлете и особенно посадке нагрузки могут быть значительными, что приводит к разрушению шестерен в редукторе внутри машинки. При использовании маломощных машинок в системе гиростабилизации был замечен эффект возбуждения автоколебаний, приводивший к разрушению пластмассовых шестерен редуктора. Если мощность машинки близка к минимально необходимой, то желательно использовать редукторы с металлическими шестернями. Для поворота всей конструкции и камеры по тангажу используется аналоговый сервопривод Turnigy TGY-R5180MG. Усилие при 6 В: 2 кг/см, вес: 12 г, размер: 23,2x12x21,6 мм. Машинок с большим углом поворота относительно мало и выбор определялся в первую очередь доступностью. Для поворота по крену используется цифровой сервопривод с металлическим редуктором Corona DS238HV Digital Metal Gear Servo. Усилие при 6 В: 4,6 кг/см, вес: 22 г, размер: 35x13x29 мм. К сервоприводам и камере надо проложить минимум 7 проводов. При этом надо, чтобы они ни за что не зацепились при повороте на 360 градусоа и не попали в кадр. Первоначально была использована система с плоским кабелем, закрепленным на спиральной пластмассовой ленте.

фото

Однако конструкция получилась слишком тяжелой, а длина проводов слишком большой и чувствительной к наводкам для видео сигнала. Поэтому в дальнейшем я пошел на ослабление оси и просверлил в ней отверстие 3,5 мм, сквозь которое проложил жгут из проводов марки МГТФ. На провод с видеосигналом была надета экранирующая оплетка.

фото

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

Вес конструкции в полностью снаряженном состоянии с аккумулятором 2650mAh Turnigy nano-tech 3S 25~50C LiPo и винтами 10x4,5 -1470 г. Положение ручки газа при зависании 65% от максимального. Время в полете около 7 минут.


28.11.2013
Установите проигрыватель Flash

Облако тегов:
3D печать
Arduino
Raspberry Pi
Аэрофотосъемка
Байдарки
Геомеханика
История
Камеры
Макросъемка
Объективы
Освещение
Панорамы
Принадлежности
Принтеры
Программы
Сканеры
Стереосъемка
Фильтры
Фокусировка
Фотокубики
...
rss