Программирование
Платформа Клевера позволяет использовать Raspberry Pi для того, чтобы запрограммировать автономный полет дрона. Чаще всего программа для автономного полета пишется на языке Python. Программа может получать телеметрию (заряд батареи, ориентацию, положение, скорости) и отправлять команды, например: полететь в точку, установить ориентацию, установить угловую скорость.
Платформа основывается на фреймворке ROS, который обеспечивает связь между пользовательской программой и сервисами Клевера, которые запущены в фоне в виде systemd-демона clover
. Для связи с полетным контроллером используется пакет MAVROS.
Для автономного полета в PX4 используется режим OFFBOARD. API Клевера переводит дрон в этом режим автоматически. В случае необходимости прерывания автономного полета, необходимо перевести дрон в любой другой режим, используя стик переключения режимов на пульте.
Система позиционирования
Для того, чтобы дрон мог зависать на месте или летать между точками, необходимо использование системы позиционирования. Такая система вычисляет и сообщает дрону, где он находится. Клевер предполагает использование нескольких систем позиционирования: optical flow (используется камера и лазерный дальномер), визуальные маркеры (используется камера и маркеры, наклеенные на пол или потолок), GPS и других.
Optical flow
Принцип работы optical flow основан на вычислении сдвигов между соседними кадрами с камеры и передачи этой информации в полетный контроллер для дальнейшего расчета смещения дрона относительно изначальной точки.
Для настройки этой системы позиционирования обращайтесь к соответствующей статье.
ArUco-маркеры
Технология визуальных маркеров позволяет рассчитать позицию дрона относительно распознанных маркеров и передать эту информацию в полетный контроллер.
Читайте цикл статей про ArUco-маркеры для получения подробностей.
GPS (уличный полет)
Использование GPS позволяет также использовать для навигации глобальные координаты – широту и долготу (функция navigate_global
).
Основная статья: подключение GPS.
Автономный полет
СОВЕТ
Для изучения языка программирования Python можно обратиться к самоучителю.
После настройки системы позиционирования становится возможным написание скриптов для автономных полетов. Для выполнения скриптов подключитесь в Raspberry Pi по SSH.
Перед первым полетом рекомендуется проверить конфигурацию Клевера при помощи утилиты selfcheck.py:
rosrun clover selfcheck.py
Для того, чтобы запустить Python-скрипт, используйте команду python3
:
python3 flight.py
Пример программы для полета (взлет, пролет вперед, посадка):
import rospy
from clover import srv
from std_srvs.srv import Trigger
rospy.init_node('flight')
get_telemetry = rospy.ServiceProxy('get_telemetry', srv.GetTelemetry)
navigate = rospy.ServiceProxy('navigate', srv.Navigate)
navigate_global = rospy.ServiceProxy('navigate_global', srv.NavigateGlobal)
set_position = rospy.ServiceProxy('set_position', srv.SetPosition)
set_velocity = rospy.ServiceProxy('set_velocity', srv.SetVelocity)
set_attitude = rospy.ServiceProxy('set_attitude', srv.SetAttitude)
set_rates = rospy.ServiceProxy('set_rates', srv.SetRates)
land = rospy.ServiceProxy('land', Trigger)
# Взлет на высоту 1 м
navigate(x=0, y=0, z=1, frame_id='body', auto_arm=True)
# Ожидание 3 секунды
rospy.sleep(3)
# Пролет вперед 1 метр
navigate(x=1, y=0, z=0, frame_id='body')
# Ожидание 3 секунды
rospy.sleep(3)
# Посадка
land()
СОВЕТ
Функция navigate не ожидает, пока дрон долетит до целевой точки; скрипт продолжит выполнение сразу. Для блокирующей версии смотрите пример функции navigate_wait
.
Обратите внимание, что параметр auto_arm
установлен на True
только у первого вызова функции navigate
. Этот параметр армит дрон и переводит его в режим автономного полета (OFFBOARD).
Параметр frame_id
задает систему координат, относительно которой задаются целевая точка для полета дрона:
body
связана с корпусом дрона;navigate_target
связана с предыдущей целевой точкой полета;map
связана с локальной системой координат дрона;aruco_map
связана с картой ArUco-маркеров;aruco_N
связана ArUco-маркером с ID=N.
Подробности описаны в статье "Системы координат".
Полное описания API Клевера приведено в статье "Автономный полет".
СОВЕТ
В Клевере также доступна поддержка блочного программирования автономных полетов.
Дополнительное оборудование
Платформа Клевера также имеет API для работы с периферией. Читайте соответствующие статьи для подробностей: