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

Этап вспомогательный. GPS.

При съемке сферических панорам важно как можно точнее удержаться в одной точке, поэтому я решил проверить, что мне даст применение датчика GPS. Мой выбор остановился на GPS модуле u-blox NEO-6M, в первую очередь за счет цены. Далее возникла дилемма: подключать его к уже установленным на вертолете мозгам MultiWii 328P Flight Controller w/FTDI & DSM2 Port, докупив I2C-GPS NAV Module для преобразования последовательного сигнала из протокола Сom в I2C, или для удобства заменить и мозги, перейдя на старший процессор Mega с его существенно большим количеством входов и последовательных портов. Да и памяти на борту будет существенно больше, что потенциально позволит использовать не только программу MultiWii, но и MegaPirate. Кроме того, у меня были нарекания на датчик давления BMP085 и я захотел попробовать плату с другим датчиком. Исходя из всех этих соображений я прикупил за 49 уе Multiwii and Megapirate AIO Flight Controller w/FTDI (ATmega 2560) V2.0 с датчиком давления MS5611-01BA01. Переход на новые мозги принципиально не изменил мои возможности, но добавил удобств. Появилась возможность подключить к ним все 8 каналов Turnigy 9X 9Ch Transmitter w/ Module & 8ch Receiver, ранее я мог использовать два из них только напрямую, подключив к рулевым машинкам, ну и естественно, очень простую процедуру подключения датчика GPS, о которой речь пойдет ниже.

u-blox NEO-6M и Multiwii and Megapirate AIO Flight Controller
Щелкнув мышкой по плате или датчику, можно увидеть их увеличенное изображение.
u-blox NEO-6M и Multiwii and Megapirate AIO Flight Controller

Поскольку полезные подписи находятся с двух сторон платы, я для собственного удобства сделал вышеприведенный коллаж

По умолчанию в модуле NEO-6M установлена скорость обмена данными 38400 бод. Хотя в файле config.h проекта Multiwii предлагается выбрать 57600 или 115200, для начала можно не перепрограммировать модуль, а записать в config.h: строку #define GPS_BAUD 38400 . Кроме этого надо выбрать порт и протокол. Я подключил к Com2, и соответственно строка в программе в этом случае будет выглядеть так: #define GPS_SERIAL 2. Модуль по умолчанию вещает сразу в двух протоколах NMEA и UBLOX. Вначале я выбрал #define NMEA и все заработало, потом #define UBLOX и тоже все работало. У меня создалось впечатление что с UBLOX спутники нашлись быстрее и в дальнейшем я остановился на этом протоколе. Для согласования с магнитным компасом надо установить отклонение магнитного полюса для вашей местности. Для Москвы соответствующая строчка выглядит так : #define MAG_DECLINIATION 10.45f. Часть кода, отвечающая за подключение GPS, приведена ниже:

/*****************************************************************************/
/*********************               GPS                **********************/
/*****************************************************************************/
/* GPS using a SERIAL port
  if enabled, define here the Arduino Serial port number and the UART speed
  note: only the RX PIN is used in case of NMEA mode, the GPS is not configured
by multiwii in NMEA mode the GPS must be configured to output GGA and
RMC NMEA sentences (which is generally the default conf for most GPS devices) at least 5Hz update rate.
uncomment the first line to select the GPS serial port of the arduino */
#define GPS_SERIAL 2 // It's the serial port number on arduino MEGA //#define GPS_BAUD 57600 #define GPS_BAUD 115200
/* GPS protocol 
   NMEA  - Standard NMEA protocol GGA, GSA and RMC  sentences are needed
   UBLOX - U-Blox binary protocol, use the ublox config file 
(u-blox-config.ublox.txt) from the source tree MTK_BINARY16 and MTK_BINARY19 - MTK3329 chipset based GPS with DIYDrones
binary firmware (v1.6 or v1.9) With UBLOX and MTK_BINARY you don't have to use GPS_FILTERING in multiwii
code!!! */
//#define NMEA
#define UBLOX
//#define MTK_BINARY16
//#define MTK_BINARY19
//#define INIT_MTK_GPS

.......

/* Get your magnetic decliniation from here : http://magnetic-declination.com/
 Convert the degree+minutes into decimal degree by ==> degree+minutes*(1/60)
 Note the sign on declination it could be negative or positive (WEST or EAST)
*/ //#define MAG_DECLINIATION 3.96f //For Budapest Hungary. #define MAG_DECLINIATION 10.45f //Москва

Поверим авторам проекта MultiWii, что скорость обмена данными надо иметь побольше и попытаемся перепрограммировать модуль NEO-6M Для этого его надо подключить к компьютеру через последовательный порт. Но у современных компьютеров остался только один вариант общения USB. В случае с мозгами на базе Arduino Mega проблема легко решается с помощью программы MultiSerialMega из комплекта примеров пакета Arduino. Меняем в ней второй порт на Serial2 и ставим для начала скорость для обеих портов 38400.

void setup() {
 // initialize both serial ports:
 Serial.begin(38400);
 Serial2.begin(38400);
 }
void loop() {
       // read from port 1, send to port 0:
       if (Serial2.available()) {
   
       Serial.write(Serial2.read()); 
       }
   
       // read from port 0, send to port 1:
       if (Serial.available()) {
   
       Serial2.write(Serial.read()); 
       }
       }

Далее нам потребуется фирменная программа u-center GPS evaluation software. Можно было бы попытаться обойтись и без нее, воспользовавшись проектом http://playground.arduino.cc/UBlox/GPS, но поскольку записывать придется не только скорость, но и все остальные параметры настройки, то рекомендуется уточнить текущие, если они вас устраивают, запустив фирменный u-center. Поэтому я, гнусно ругаясь, вынужден был реанимировать случайно полностью не удаленные с ноутбука винды. Далее все относительно просто. Запускаем и выбираем в пункте меню Reciever 38400. Программа должна опознать устройство и, если оно видит небо, то и определить текущие координаты.

u-center

Далее идем в меню View/Configuration View/PRT и устанавливаем скорость 115200 и жмем внизу на кнопку Send. После этого программа теряет связь с модулем до перенастройки скорости соединения в MultiSerialMega. В ней надо изменить строку на Serial2.begin(115200);

Здесь тонкий момент. Модуль помнит о новой скорости только до выключения питания. Поэтому надо обеспечить независимое питание модуля GPS, если он питается от платы Arduino, а та в свою очередь только от компьютера.

u-center

После смены скорости u-center снова увидит плату и теперь в меню CFG надо запомнить измененное значение в энергонезависимой памяти, выбрав пункт Save current configuration и нажав кнопку Send.

u-center

Чувствительность очень хорошая, существенно лучше чем у Garmin eTrex и у моего смартфона HTC Desire HD. У первого антенна аналогичная, но здесь, вероятно, дело в прогрессе техники за 15 лет, а во втором случае, вероятно, именно антенна слабое место телефона.

фото
Антенна Garmin eTrex (слева) и u-blox NEO-6M


фото
Так выглядит датчик GPS, установленный на мою модель вертолета.

MultiwiiConf

В программе MultiwiiConf теперь показывается широта и долгота, и можно приписать одной из ручек пульта управления возможность включить удержание на месте по датчику GPS и возврат в место старта. Портативная программа MultiWii EZ-GUI для Android предоставляет еще больше возможностей:

MultiWii EZ-GUI
MultiWii EZ-GUI


MultiWii EZ-GUI


MultiWii EZ-GUI
MultiWii EZ-GUI
   

Насколько эффективно и надежно удержание вертолета по данным GPS, я пока не имею однозначного мнения. Надо более тщательно настроить параметры P.I.D. С параметрами по умолчанию машина пытается вернуться домой, но достаточно вяло и на мой взгляд не очень точно. Эксперименты проводились на небольшом удалении от точки старта, MultiWii EZ-GUI показывала что датчик отслеживает положение примерно с точностью до метра. При удалении от точки старта метров на 10 включение возврата домой приводило к некоторым перемещениям аппарата, но это не был возврат в точку. Возможно, если удалиться метров на 100, эффект будет более ярким и точность в 10 метров покажется удовлетворительной.

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

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

u-blox NEO-6MMultiwii and Megapirate AIO Flight Controller Multiwii MWC FC Bluetooth Module Programmer u-blox NEO-6M Multiwii and Megapirate AIO Flight Controller Multiwii MWC FC Bluetooth Module Programmer