Программирование Геоскан Пионер на Lua

Создавайте автономные миссии и управляйте периферией с помощью простого и мощного API.

Управление светодиодами

Установка цвета

Используйте модуль Ledbar для управления RGB-светодиодами на борту квадрокоптера.

-- Создаем объект управления светодиодами
local leds = Ledbar.new(4) -- Инициализируем 4 светодиода

-- Устанавливаем красный цвет на первом светодиоде (индекс 0)
-- Параметры: индекс, R, G, B (от 0 до 1)
leds:set(0, 1, 0, 0)
Параметр Тип Описание
index number Индекс светодиода (0-3)
r, g, b number Интенсивность цвета (0.0 - 1.0)

Индикация состояний

Отображение уровня заряда батареи и режимов полета с помощью цветовых кодов.

local leds = Ledbar.new(4)

-- Функция индикации батареи
function updateBatteryStatus()
    local voltage = sensors.battery()
    if voltage < 7.0 then
        -- Критический уровень: мигающий красный
        leds:set(0, 1, 0, 0)
    elseif voltage < 7.4 then
        -- Низкий уровень: желтый
        leds:set(0, 1, 0.5, 0)
    else
        -- Норма: зеленый
        leds:set(0, 0, 1, 0)
    end
end

Базовые миссии

1. Автоматический взлет

Перед взлетом необходимо выполнить префлайт-проверку и убедиться в готовности GPS/LPS.

-- Проверка готовности к взлету
ap.push(Ev.MCE_PREFLIGHT)

-- Задержка для стабилизации сенсоров
Timer.callLater(2, function()
    local x, y, z = sensors.position()
    if z < 0.1 then -- Мы на земле
        ap.push(Ev.MCE_TAKEOFF)
    else
        print("Внимание: дрон уже в воздухе или ошибка сенсора")
    end
end)
Параметр Значение Описание
Высота взлета 1.5 м Значение по умолчанию
Точность GPS < 2.0 Рекомендуемое HDOP
Flight demonstration

2. Полет по координатам

Перемещение в локальной системе координат с контролем скорости и высоты.

-- Полет по квадрату: (x, y, z, time)
local mission_points = {
    {1, 0, 1.5, 3}, -- 1м вперед
    {1, 1, 1.5, 3}, -- 1м вправо
    {0, 1, 1.5, 3}, -- 1м назад
    {0, 0, 1.5, 3}  -- Домой
}

local current_p = 1

function next_point()
    if mission_points[current_p] then
        local p = mission_points[current_p]
        ap.goToLocalPoint(p[1], p[2], p[3], p[4])
        current_p = current_p + 1
    else
        ap.push(Ev.MCE_LANDING)
    end
end

function callback(event)
    if event == Ev.TAKEOFF_COMPLETE or event == Ev.POINT_REACHED then
        next_point()
    end
end
Схема полётов (редактируемая)

3. Безопасная посадка

Контролируемое снижение с проверкой высоты и скорости снижения.

-- Инициализация посадки
ap.push(Ev.MCE_LANDING)

function callback(event)
    if event == Ev.COPTER_LANDED then
        print("Посадка выполнена. Моторы выключены.")
    end
end
Параметр Тип Описание
Descent Speed number ~0.5 - 1.0 м/с (авто)
Safe Zone bool Проверка препятствий (ИК/УЗ)

Учебные блоки: Программирование Пионер на Lua

Блок 1: Основы Lua

Переменные, условия, циклы и базовый синтаксис.

Открыть

Блок 2: Периферия и Таймеры

Управление светодиодами Ledbar и работа с Timer.

Открыть

Блок 3: Автопилот и Миссии

Взлет, посадка и полет по точкам (LPS/GPS).

Открыть