Модуль позволяет квадрокоптеру отслеживать свое текущее положение и скорость. Для большей точности позиционирования антенне модуля необходим обзор неба, не используйте режим GPS в помещении.
Модуль GPS/Глонасс устанавливается непосредственно на главную плату квадрокоптера сверху и крепится к ней винтами М3. При подключении дополнительных модулей на нижнюю плату расширения их шлейфы стыкуются с разъемами на верхней части модуля GPS, таким образом подключаясь к основной плате "сквозь" модуль GPS.
Модуль также оснащен компасом для точной ориентации в пространстве. Показания компаса могут искажаться вблизи массивных металлических объектов и зданий.
При подключении к Pioneer Station убедитесь, что в "параметрах автопилота" выбран режим позиционирования по GPS, в противном случае активируйте его нажатем на кнопку. В стандартном режиме подключения работу компаса можно наблюдать на панели авиагоризонта.
Note
При первом подключении рекомендуется убедиться в правильной работе компаса. Сориентируйте Пионер по оси "север-юг" и убедитесь, что показания в Pioneer Station соответствуют сторонам света при повороте квадрокоптера на 90 градусов. Если погрешность превышает 10 градусов, выберите "калибровка - компаса" в меню Pioneer Station и следуйте указаниям помощника.
Также в реальном времени отображается количество спутников, доступных для работы. Чем больше спутников "видит" модуль, тем выше точность позиционирования. При холодном старте (первом включении модуля в новой точке) синхронизация занимает от одной до трех минут. При успешной синхронизации зеленый светодиод на модуле горит постоянно. Теперь, если выключить питание "Пионера" и через некоторое время снова включить в той же точке, синхронизация произойдет значительно быстрее.
LED индикация | состояние | что делать |
---|---|---|
горят красный и зеленый | неверные параметры | переключить параметры на GPS |
горит красный | поиск спутников | ждать 1-3 минуты, перезагрузить |
горит зеленый | спутники найдены | можно лететь |
Управляя квадрокоптером с пульта, выберите режим работы с системой навигации (тумблер SwB в среднем положении), и "Пионер" будет использовать подключенный модуль GPS, что сделает полет более стабильным.
При программировании полёта используется команда ap.goToLocalPoint(x, y, z). При этом ось x направлена на восток, ось y - на север. Значение z определяет высоту относительно точки старта. Все значения указываются в метрах.
Также можно использовать команду ap.goToPoint(x, y, z). Здесь x, y это географические координаты (широта, долгота) точки, в которую полетит Пионер. Z - высота в этой точке относительно точки старта.
Note
Если указанная точка старта будет дальше, чем в 500 метрах от фактического местоположения, квадрокоптер откажется взлетать. Также, параметры Flight_com_flyAreaSize и Flight_com_maxAltitude ограничивают расстояние и высоту, на которую коптер может улететь от точки старта. Подробнее - в описании параметров в Pioneer Station.
Ниже приведен пример программы, использующий модуль GPS. Загрузите программу на Пионер, найдите подходящую площадку и подключите аккумулятор. Когда светодиод на модуле перестанет мигать, переключите SwB в нижнее положение и запустите выполнение программы, нажав кнопку "Старт" на базовой плате квадрокоптера. Через 5 секунд Пионер взлетит, пролетит на 10 метров на восток и вернется на точку старта.
Пионер определяет свое местоположение в момент запуска моторов. Эта точка принимается за начало координат при выполнении команды ap.goToLocalPoint.
Неточность позиционирования с GPS и ошибка определения высоты могут достигать 3 метров. Учитывайте это при составлении своих полетных программ.
-- Упрощение вызова функции распаковки таблиц из модуля table local unpack = table.unpack -- Количество светодиодов на базовой плате local ledNumber = 4 -- Создание порта управления светодиодами local leds = Ledbar.new(ledNumber) -- Функция смены цвета светодиодов local function changeColor(color) -- Поочередное изменение цвета каждого из 4-х светодиодов for i=0, ledNumber - 1, 1 do leds:set(i, unpack(color)) end end -- Таблица цветов в формате RGB для передачи в функцию changeColor local colors = { {1, 0, 0}, -- красный {0, 1, 0}, -- зеленый {0, 0, 1}, -- синий {1, 1, 0}, -- желтый {1, 0, 1}, -- фиолетовый {0, 1, 1}, -- бирюзовый {1, 1, 1}, -- белый {0, 0, 0} -- черный/отключение светодиодов } -- Таблица точек полетного задания в формате {x,y,z} local points = { {0, 0, 0.7}, {0, 1, 0.7}, {0.5, 1, 0.7}, {0.5, 0, 0.7} } -- Счетчик точек local curr_point = 1 -- Функция, изменяющая цвет светодиодов и выполняющая полет к следующей точке local function nextPoint() -- Текущий цвет. % - остаток от деления, # - размер таблицы. Такая конструкция использована, -- чтобы цвета продолжали меняться, даже если точек больше, чем цветов в таблице curr_color = ((curr_point - 1) % (#colors - 2)) + 1 -- Изменение цвета светодиодов changeColor(colors[curr_color]) -- Полет к текущей точке, если её номер не больше количества заданных точек if(curr_point <= #points) then Timer.callLater(1, function() -- Команда полета к точке в системе позиционирования ap.goToLocalPoint(unpack(points[curr_point])) -- Инкрементация переменной текущей точки curr_point = curr_point + 1 end) -- Посадка, если номер текущей точки больше количества заданных точек else Timer.callLater(1, function() -- Команда на посадку ap.push(Ev.MCE_LANDING) end) end end -- Функция обработки событий, автоматически вызывается автопилотом function callback(event) -- Когда коптер поднялся на высоту взлета Flight_com_takeoffAlt, переходим к полету по точкам if(event == Ev.TAKEOFF_COMPLETE) then nextPoint() end -- Когда коптер достиг текущей точки, переходим к следующей if(event == Ev.POINT_REACHED) then nextPoint() end -- Когда коптер приземлился, выключаем светодиоды if (event == Ev.COPTER_LANDED) then changeColor(colors[8]) end end -- Предстартовая подготовка ap.push(Ev.MCE_PREFLIGHT) -- Зажигание светодиодов белым цветом changeColor(colors[7]) -- Таймер, через 2 секунды вызывающий функцию взлета Timer.callLater(2, function() ap.push(Ev.MCE_TAKEOFF) end)