Модуль навигации GPS Глонасс¶
Модуль позволяет квадрокоптеру отслеживать свое текущее положение и скорость. Для большей точности позиционирования антенне модуля необходим обзор неба, не используйте режим GPS в помещении.
Модуль GPS/Глонасс устанавливается непосредственно на главную плату квадрокоптера сверху и крепится к ней винтами М3. При подключении дополнительных модулей на нижнюю плату расширения их шлейфы стыкуются с разъемами на верхней части модуля GPS, таким образом подключаясь к основной плате «сквозь» модуль GPS.
Модуль также оснащен компасом для точной ориентации в пространстве. Показания компаса могут искажаться вблизи массивных металлических объектов и зданий.
При подключении к Pioneer Station убедитесь, что в «параметрах автопилота» выбран режим позиционирования по GPS, в противном случае активируйте его нажатем на кнопку. В стандартном режиме подключения работу компаса можно наблюдать на панели авиагоризонта.
Примечание
При первом подключении рекомендуется убедиться в правильной работе компаса. Сориентируйте Пионер по оси «север-юг» и убедитесь, что показания в 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 - высота в этой точке относительно точки старта.
Примечание
Если указанная точка старта будет дальше, чем в 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)