Описание методов 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)
Выполнить инициализацию 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 |