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

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

time()
Результат:

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

deltaTime()
Результат:

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

launchTime()
Результат:

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

sleep(seconds)

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

Параметры:

seconds – время сна в секундах.

boardNumber

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

Пример:

local boardNumber = boardNumber

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

ap.push(Event)

Добавить событие автопилоту (см. События, отправляемые автопилоту).

Параметры:

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)

Выполнить инициализацию 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)

Установить скорость обмена данными по шине UART.

Параметры:

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