Lua документация по API¶
Описание API функций взаимодействия с автопилотом¶
-
time
()¶ Возвращает время с момента включения коптера.
-
deltaTime
()¶ Возвращает разницу в секундах между временем коптера, которое можно получить функцией
time()
, и глобальным временем системы навигации.
-
launchTime
()¶ Возвращает время запуска для системы навигации.
-
sleep
(seconds)¶ Останавливает выполнение скрипта на заданное время, допустимы дробные значения аргумента. Рекомендуется использовать
Timer
, так как sleep блокирует дальнейшее выполнение скрипта.Параметры: seconds – время сна в секундах.
-
boardNumber
¶ Получение идентификационного номера борта - доступно через переменную.
Пример
local boardNumber = boardNumber
-
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 – угол в радианах.
RGB светодиоды¶
-
class
Ledbar
¶ -
new
(Count)¶ Cоздать новый Ledbar с заданным количеством светодиодов.
Параметры: Count – количество светодиодов.
-
set
(self, num, r, g, b)¶ Установить цвет на конкретный светодиод.
Параметры: - num – номер светодиода, нумеруются с 0 по 3 на плате, далее последовательно по подключенным модулям;
- r – интенсивность красной компоненты цвета в интервале от [0;1];
- g – интенсивность зеленой компоненты цвета в интервале от [0;1];
- b – интенсивность синей компоненты цвета в интервале от [0;1].
-
Смотри также fromHSV()
Пример
К коптеру дополнительно подключен модуль с магнитом, на котором 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
-
fromHSV
(hue, saturation, value)¶ Конвертирует представление цвета из HSV в RGB. Можно использовать для задания цвета светодиода.
Параметры: - hue – задает цветовой тон. Варьируется в пределах [0;360];
- saturation – задает насыщенность. Варьируется в пределах [0;100];
- value – задает значение цвета. Варьируется в пределах [0;100];
Результат: Возвращает три компонеты цвета r, g, b.
GPIO¶
-
class
Gpio
¶ -
new
(Port, Pin, Mode)¶ Cоздать GPIO на порте с настройками.
Параметры: - Port – Gpio.A; Gpio.B; … Gpio.E;
- Pin – номер пина на порте;
- Mode – Gpio.INPUT, Gpio.Output, Gpio.ALTFU.
-
read
(self)¶ Получить значение.
-
set
(self)¶ Установить значение в 1.
-
reset
(self)¶ Установить значение в 0.
-
write
(self, value)¶ Параметры: value – установить значение.
-
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¶
-
class
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.
-
read
(self, size)¶ Прочитать
size
байт.
-
write
(self, data, size)¶ Записать данные (data) длиной (size).
-
bytesToRead
(self)¶ Количество данных доступных для чтения.
-
setBaudRate
(self, rate)¶ Установить скорость.
Параметры: rate – скорость uart.
-
Пример
local uart = Uart.new(1, 115200)
uart:read(10) -- прочитать 10 байт
SPI¶
-
class
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.
-
read
(self, size)¶ Прочитать
size
байт.
-
write
(self, data, size)¶ Записать данные (data) длиной (size).
-
exchange
(self, data, size)¶ Записать данные (data) длиной (size) и прочитать size.
-
Пример
local spi = Spi.new(2, 1000000)
spi:exchange("hello", 5) -- записать данные (data) длиной (size) и прочитать size
Работа с камерой¶
Для понимания работы рекомендуется ознакомиться с примером: Фото и запись видео
Запрос захвата:
camera.requestMakeShot()
Проверка ответа на ранее сделанный запрос:
result = camera.checkRequestShot()
Возможные ответы:
- -1 - Ответ не получен.
- 0 - Команда выполнена успешно.
- 1 - Команда не выполнена.
camera.requestRecordStart() - запрос на старт записи.
camera.requestRecordStop() - запрос на остановку записи.
camera.checkRequestRecord() - проверка состояния связи.(получение ответа от устройства)
Таймеры¶
-
class
Timer
¶ -
new
(sec, func)¶ Cоздать новый Timer.
Параметры: - sec – время интервала в секундах;
- func – функция, которая будет вызываться с заданным интервалом.
-
start
(self)¶ Запуcкает таймер.
-
stop
(self)¶ Останавливает таймер. При этом остановка уже запущенного таймера произойдет после выполнения функции, стоящей в очереди на выполнение.
-
callAt
(local_time, func)¶ Cоздает и запускает новый Timer с функцией, которая будет вызвана один раз.
Параметры: - local_time – локальное время (возвращаемое функцией
time()
), указывающее момент вызова функции; - func – функция, которая будет вызвана.
- local_time – локальное время (возвращаемое функцией
-
callLater
(delay, func)¶ Cоздает и запускает новый Timer с функцией, которая будет вызвана один раз.
Параметры: - delay – время, через которое будет вызвана функция;
- func – функция, которая будет вызвана.
-
callAtGlobal
(global_time, func)¶ Cоздает и запускает новый Timer с функцией, которая будет вызвана один раз.
Параметры: - global_time – глобальное время (
time()
+deltaTime()
), указывающее момент вызова функции; - func – функция, которая будет вызвана.
- global_time – глобальное время (
-
Примечание
При использовании функций callAt()
, callLater()
, callAtGlobal()
следует обратить внимание,
что может быть не более 16 одновременно ожидающих таймеров. Если количество одновременно ожидающих таймеров больше 16, то новый таймер не будет создан.
Пример
Смотри Example
События, отправляемые автопилоту¶
События (events) представляются константами с префиксом «Ev.»
Название | Описание |
---|---|
MCE_PREFLIGHT | Запустить двигатели и провести подготовку |
ENGINES_DISARM | Отключить двигатели |
MCE_LANDING | Отправить на посадку |
MCE_TAKEOFF | Отправить на взлет |
–устаревшие– | |
ENGINES_ARM | Завести двигатели |
Получение данных от автопилота¶
Для получение данных от автопилота используется класс Sensors
-
class
Sensors
¶ -
lpsPosition
()¶ Результат: x, y, z
-
lpsVelocity
()¶ Результат: vx, vy, vz
-
lpsYaw
()¶ Результат: yaw
-
orientation
()¶ Данные положения.
Результат: roll, pitch, azimuth
-
altitude
()¶ Данные высоты по барометру.
Результат: высота в метрах
-
range
()¶ Данные c датчиков расстояния.
Результат: Возвращает значения с датчика расстояния. Возвращает несколько значений.
-
accel
()¶ Данные c акселерометра.
Результат: ax, ay, az
-
gyro
()¶ Данные c гироскопа.
Результат: gx, gy, gz
-
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()
Описание необходимых служебных функций скрипта¶
function callback(event) -- Вызывается, когда приходят события от автопилота.
end
Доступны следующие события, приходящие от автопилота:
Название | Описание |
---|---|
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 более не используется.
Описание пинов разъемов модулей¶
Пины МК АП на 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 |