Описание методов API

Управляющие функции | Управление программой

time()

Возвращает время с момента включения коптера.

deltaTime()

Возвращает разницу в секундах между временем коптера, которое можно получить функцией time(), и глобальным временем системы навигации.

launchTime()

Возвращает время запуска для системы навигации.

sleep(seconds)

Останавливает выполнение скрипта на заданное время, допустимы дробные значения аргумента. Рекомендуется использовать Timer , так как sleep блокирует дальнейшее выполнение скрипта.

Параметры:seconds – время сна в секундах.
boardNumber

Получение идентификационного номера борта - доступно через переменную.

Пример

local boardNumber = boardNumber

Объект ap | Управление автопилотом

ap.push(Event)

Добавить событие автопилоту (см. outluaevent).

Параметры:Event – номер события или название (например, Ev.COPTER_LANDED).

Пример

Ev.MCE_PREFLIGHT
ap.push(Ev.MCE_PREFLIGHT)
ap.goToPoint(latitude, longitude, altitude)
Для полёта с использованием GPS.
Параметры:
  • latitude – задается широта в градусах, умноженных на \(10^{-7}\);
  • longitude – задается долгота в градусах, умноженных на \(10^{-7}\);
  • altitude – задается высота в метрах.

Пример

ap.goToPoint(60.0859810, 30.4206500, 50)
ap.goToLocalPoint(x, y, z, time)

Для полёта с использованием локальной системы координат.

Параметры:
  • x – задается координата точки по оси x, в метрах;
  • y – задается координата точки по оси y, в метрах;
  • z – задается координата точки по оси z, в метрах;
  • time – время, за которое коптер перейдет в следующую точку, в секундах. Если значение не указано, коптер стремится к точке с максимальной скоростью.

Пример

ap.goToLocalPoint(1, 1, 1.2)
-- или
ap.goToLocalPoint(1, 1, 1.2, 10)
ap.updateYaw(angle)

Установить рыскание.

Параметры:angle – угол в радианах.

Объект Ledbar | Управление светодиодами

Ledbar.new(Count)

Cоздать новый Ledbar с заданным количеством светодиодов.

Параметры:Count – количество светодиодов.
Ledbar.set(self, num, r, g, b)

Установить цвет на конкретный светодиод.

Параметры:
  • num – номер светодиода, нумеруются с 0 по 3 на плате, далее последовательно по подключенным модулям;
  • r – интенсивность красной компоненты цвета в интервале от [0;1];
  • g – интенсивность зеленой компоненты цвета в интервале от [0;1];
  • b – интенсивность синей компоненты цвета в интервале от [0;1].
fromHSV(hue, saturation, value)

Конвертирует представление цвета из HSV в RGB. Можно использовать для задания цвета светодиода.

Параметры:
  • hue – задает цветовой тон. Варьируется в пределах [0;360];
  • saturation – задает насыщенность. Варьируется в пределах [0;100];
  • value – задает значение цвета. Варьируется в пределах [0;100];
Результат:

Возвращает три компоненты цвета: r, g, b.

Пример

К коптеру дополнительно подключен модуль с магнитом, на котором 4 RGB светодиода.

local leds = Ledbar.new(8)
for i = 0, 3, 1 do
    leds:set(i, 1, 0, 0)
end

for i = 4, 7, 1 do
    leds:set(i, 0, 0.5, 0)
end

Объект GPIO | Управление пинами

Gpio.new(Port, Pin, Mode)

Cоздать GPIO на порте с настройками.

Параметры:
  • Port – Gpio.A; Gpio.B; … Gpio.E;
  • Pin – номер пина на порте;
  • Mode – Gpio.INPUT, Gpio.Output, Gpio.ALTFU.
Gpio.read(self)

Получить значение.

Gpio.set(self)

Установить значение в 1.

Gpio.reset(self)

Установить значение в 0.

Gpio.write(self, value)
Параметры:value – установить значение.
Gpio.setFunction(self, num)

Задать номер альтернативной функции.

Пример

local pin_name = Gpio.new(Gpio.A, 1, Gpio.OUTPUT)
pin_name:read() -- получить значение
pin_name:set() -- установить значение 1
pin_name:reset() -- установить значение 0
pin_name:write(true) -- установить значение true
pin_name:setFunction(1) -- задать номер альтернативной функции

Объект UART | Управление UART

Uart.new(num, rate, parity, stopBits)

Cоздать Uart на порте с настройками.

Параметры:
  • num – номер UART;
  • rate – скорость;
  • parity – Uart.PARITY_NONE, Uart.PARITY_EVEN, Uart.PARITY_ODD, необязательный параметр, по умолчанию Uart.PARITY_NONE;
  • stopBits – Uart.ONE_STOP, Uart.TWO_STOP, необязательный параметр, по умолчанию Uart.ONE_STOP.
Uart.read(self, size)

Прочитать size байт.

Uart.write(self, data, size)

Записать данные (data) длиной (size).

Uart.bytesToRead(self)

Количество данных доступных для чтения.

Uart.setBaudRate(self, rate)

Установить скорость.

Параметры:rate – скорость uart.

Пример

local uart = Uart.new(1, 115200)
uart:read(10) -- прочитать 10 байт

Объект SPI | Управление SPI

Spi.new(num, rate, seq, mode)

Cоздать Spi на порте с настройками.

Параметры:
  • num – номер Spi
  • rate – скорость
  • seq – Spi.MSB, Spi.LSB, Spi.MSB_16, Spi.LSB_16, необязательный параметр, по умолчанию Spi.MSB;
  • mode – Spi.MODE0, Spi.MODE1, Spi.MODE2, Spi.MODE3, необязательный параметр, по умолчанию Spi.MODE0.
Spi.read(self, size)

Прочитать size байт.

Spi.write(self, data, size)

Записать данные (data) длиной (size).

Spi.exchange(self, data, size)

Записать данные (data) длиной (size) и прочитать size.

Пример

local spi = Spi.new(2, 1000000)
spi:exchange("hello", 5) -- записать данные (data) длиной (size) и прочитать size

Объект camera | Управление камерой

Для понимания работы рекомендуется ознакомиться с примером: Фото и запись видео

camera.requestMakeShot()

Запрос захвата

camera.checkRequestShot()

Проверка ответа на ранее сделанный запрос:

Возможные ответы:

  • -1 - Ответ не получен.
  • 0 - Команда выполнена успешно.
  • 1 - Команда не выполнена.
camera.requestRecordStart()

Запрос на старт записи

requestRecordStop()

Запрос на остановку записи

camera.checkRequestRecord()

Проверка ответа на ранее сделанный запрос:

Возможные ответы:

  • -1 - Ответ не получен.
  • 0 - Команда выполнена успешно.
  • 1 - Команда не выполнена.

Объект Timer | Управление таймерами

Timer.new(sec, func)

Cоздать новый Timer.

Параметры:
  • sec – время интервала в секундах;
  • func – функция, которая будет вызываться с заданным интервалом.
Timer.start(self)

Запуcкает таймер.

Timer.stop(self)

Останавливает таймер. При этом остановка уже запущенного таймера произойдет после выполнения функции, стоящей в очереди на выполнение.

Timer.callAt(local_time, func)

Cоздает и запускает новый Timer с функцией, которая будет вызвана один раз.

Параметры:
  • local_time – локальное время (возвращаемое функцией time()), указывающее момент вызова функции;
  • func – функция, которая будет вызвана.
Timer.callLater(delay, func)

Cоздает и запускает новый Timer с функцией, которая будет вызвана один раз.

Параметры:
  • delay – время, через которое будет вызвана функция;
  • func – функция, которая будет вызвана.
Timer.callAtGlobal(global_time, func)

Cоздает и запускает новый Timer с функцией, которая будет вызвана один раз.

Параметры:
  • global_time – глобальное время (time() + deltaTime()), указывающее момент вызова функции;
  • func – функция, которая будет вызвана.

Примечание

При использовании функций callAt(), callLater(), callAtGlobal() следует обратить внимание, что может быть не более 16 одновременно ожидающих таймеров. Если количество одновременно ожидающих таймеров больше 16, то новый таймер не будет создан.


Объект Sensors | Получение данных от датчиков

Для получение данных от автопилота используется класс Sensors

Sensors.lpsPosition()
Результат:x, y, z
Sensors.lpsVelocity()
Результат:vx, vy, vz
Sensors.lpsYaw()
Результат:yaw
Sensors.orientation()

Данные положения.

Результат:roll, pitch, azimuth
Sensors.altitude()

Данные высоты по барометру.

Результат:высота в метрах
Sensors.range()

Данные c датчиков расстояния.

Результат:Возвращает значения с датчика расстояния. Возвращает несколько значений.
Sensors.accel()

Данные c акселерометра.

Результат:ax, ay, az
Sensors.gyro()

Данные c гироскопа.

Результат:gx, gy, gz
Sensors.rc()

Данные c пульта управления.

Результат:channel1, channel2, channel3, channel4, channel5, channel6, channel7, channel8

Примеры

local lpsPosition = Sensors.lpsPosition
local lpsVelocity = Sensors.lpsVelocity
local lpsYaw = Sensors.lpsYaw
local orientation = Sensors.orientation
local range = Sensors.range
local accel = Sensors.accel
local gyro = Sensors.gyro
local rc = Sensors.rc

lpsX, lpsY, lpsZ = lpsPosition()
lpsVelX, lpsVelY, lpsVelZ = lpsVelocity()
yaw = lpsYaw()

roll, pitch, azimuth = orientation()

range1, range2, _,_, range3 = range()

ax, ay, az = accel()
gx, gy, gz = gyro()
aileron, _, _, _, _, _, _, ch8, = rc()

Объект mailbox | Беспроводная передача сообщений

mailbox.connect(ip, port)

Инициализация подключения к устройству с заданным адресом и портом

Параметры:
  • ip – str - ip адрес устройства назначения
  • port – num - порт устройства назначения, рекомендуется использовать 8889

Пример

hull, message = mailbox.connect("192.168.0.100", 8889)
mailbox.hasMessages()

Проверяет, есть ли пришедшие сообщения

Результат:bool - есть ли пришедшие сообщения

Пример

has_mes = mailbox.hasMessages()
mailbox.myHullNumber()

Возвращает текущий бортномер устройства

Результат:num - бортномер устройства

Пример

my_hull = mailbox.myHullNumber()
mailbox.receive(blocking)

Считывание одного байта

Параметры:blocking – true|false - блокирование выполнения программы, при true ожидает получения сообщения, при false - возвращает сообщение из буфера или -1, если сообщений нет.
Результат:hull - бортномер отправителя, message - сообщение

Пример

hull, message = mailbox.receive(true)
mailbox.send(hull, message)

Отправка сообщения

Параметры:
  • hull – num - бортномер устройства, которому отправляется сообщение, если hull < 0, то сообщение отправится всем известным устроствам
  • message – num|str - сообщение для отправки

Пример

mailbox.send(42, "Hello Username")
mailbox.send(-1, "Hello World")
mailbox.setHullNumber(hull)

Устанавливает новый бортномер для устройства, перезаписывается параметр Trik_hullNum

Параметры:hull – num - новый бортномер

Пример

mailbox.setHullNumber(12)

Дополнительные примеры программ можно посмотреть на странице с описанием протокола mailbox


События, отправляемые автопилоту

События (events) представляются константами с префиксом «Ev.»

Название Описание
MCE_PREFLIGHT Запустить двигатели и провести подготовку
ENGINES_DISARM Отключить двигатели
MCE_LANDING Отправить на посадку
MCE_TAKEOFF Отправить на взлет
–устаревшие–  
ENGINES_ARM Завести двигатели

События, принимаемые от автопилота

Доступны следующие события, приходящие от автопилота:

Название Описание
ENGINES_STARTED Двигатели запущены
COPTER_LANDED Коптер совершил посадку
TAKEOFF_COMPLETE Коптер достиг высоты взлета
POINT_REACHED Коптер достиг точки
POINT_DECELERATION Коптер начал тормозить при подлёте к точке
LOW_VOLTAGE1 Низкое напряжение аккумулятора, для возвращения домой
LOW_VOLTAGE2 Низкое напряжение аккумулятора, переходит в режим посадки
SYNC_START Получен сигнал синхронного старта от системы навигации
SHOCK Столкновение или слишком сильные вибрации
CONTROL_FAIL Угол наклона коптера превысил допустимый
ENGINE_FAIL Отказ двигателя
  • событие Ev.ALTITUDE_REACHED ( коптер достиг высоты взлёта) начиная с версии АП 1.5.6173 более не используется.

Описание необходимых служебных функций скрипта

function callback(event) -- Вызывается, когда приходят события от автопилота.
end

Описание пинов разъемов модулей

Пины МК АП на Pioneer_Base_v.1.0-v.1.1, выведенные на внешние разъемы:

Разъем X1 (пин МК) Функция Описание
1 Питание 5 В (только с АКБ) Максимум 2 А
2 Питание 3.3 В Максимум 2 А
3 (PA12) USART1_RTS  
4 (PA11) USART1_CTS, TIM1_CH4 Module_OpenMV
5 (PA10) USART1_RX, TIM1_CH3 Module_GPS, Module_USNav
6 (PA9) USART1_TX, TIM1_CH2 Module_GPS, Module_USNav
7 (PA15) SPI3_NSS, TIM2_CH1 Module_GPS, Module_OpenMV
8 (PC10) SPI3_SCK Module_GPS, Module_OpenMV
9 (PC11) SPI3_MISO Module_GPS, Module_OpenMV
10 (PB5) SPI3_MOSI, TIM3_CH2 Module_GPS, Module_OpenMV
11 Земля  
12 Земля  

Разъем X2 (пин МК) Функция Описание
1 Питание 5 В (только с АКБ) Максимум 2 А
2 Питание 3.3 В Максимум 2 А
3 (PC2) ADCx_IN12  
4 (PC3) ADCx_IN13  
5 (PA1) ADCx_IN1, TIM2_CH2, TIM5_CH2 Module_Cargo (упр. магнитом)
6 (PB7) I2C1_SDA, TIM4_CH2 Module_ToF, Module_OpenMV
7 (PB6) I2C1_SCL, TIM4_CH1 Module_ToF, Module_OpenMV
8 (PA0) DATA WS2812B Уровень 5 В. Module_LED
9 Земля  
10 Земля  

Для Pioneer_Base_v.1.2:

Разъем X2 (пин МК) Функция Описание
3 (PA0) USART4_TX, ADCx_IN0, TIM2_CH1, TIM5_CH1 Module_OpenMV
4 (PA1) USART4_RX, ADCx_IN1, TIM2_CH2, TIM5_CH2 Module_OpenMV
5 (PС3) ADCx_IN13, SPI2_MOSI Module_Cargo (упр. магнитом)
8 (PC12) DATA WS2812B Уровень 5 В. Module_LED