Описание методов 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 |