Аэрофотосъемка с беспилотного вертолетаЭтап вспомогательный. 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, о которой речь пойдет ниже. Щелкнув мышкой по плате или датчику, можно увидеть их увеличенное изображение. Поскольку полезные подписи находятся с двух сторон платы, я для собственного удобства сделал вышеприведенный коллаж По умолчанию в модуле 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 /* GPS protocol NMEA - Standard NMEA protocol GGA, GSA and RMC sentences are needed UBLOX - U-Blox binary protocol, use the ublox config file ....... /* 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) Поверим авторам проекта 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. Программа должна опознать устройство и, если оно видит небо, то и определить текущие координаты. Далее идем в меню View/Configuration View/PRT и устанавливаем скорость 115200 и жмем внизу на кнопку Send. После этого программа теряет связь с модулем до перенастройки скорости соединения в MultiSerialMega. В ней надо изменить строку на Serial2.begin(115200); Здесь тонкий момент. Модуль помнит о новой скорости только до выключения питания. Поэтому надо обеспечить независимое питание модуля GPS, если он питается от платы Arduino, а та в свою очередь только от компьютера. После смены скорости u-center снова увидит плату и теперь в меню CFG надо запомнить измененное значение в энергонезависимой памяти, выбрав пункт Save current configuration и нажав кнопку Send. Чувствительность очень хорошая, существенно лучше чем у Garmin eTrex и у моего смартфона HTC Desire HD. У первого антенна аналогичная, но здесь, вероятно, дело в прогрессе техники за 15 лет, а во втором случае, вероятно, именно антенна слабое место телефона. Антенна Garmin eTrex (слева) и u-blox NEO-6M В программе MultiwiiConf теперь показывается широта и долгота, и можно приписать одной из ручек пульта управления возможность включить удержание на месте по датчику GPS и возврат в место старта. Портативная программа MultiWii EZ-GUI для Android предоставляет еще больше возможностей: Насколько эффективно и надежно удержание вертолета по данным GPS, я пока не имею однозначного мнения. Надо более тщательно настроить параметры P.I.D. С параметрами по умолчанию машина пытается вернуться домой, но достаточно вяло и на мой взгляд не очень точно. Эксперименты проводились на небольшом удалении от точки старта, MultiWii EZ-GUI показывала что датчик отслеживает положение примерно с точностью до метра. При удалении от точки старта метров на 10 включение возврата домой приводило к некоторым перемещениям аппарата, но это не был возврат в точку. Возможно, если удалиться метров на 100, эффект будет более ярким и точность в 10 метров покажется удовлетворительной. 17.07.2013
Установите проигрыватель Flash
|
Облако тегов:
...
|