Голосовое управление квадрокоптером ArDrone 2.0 через ROS. Часть 1


Квадрокоптер ArDrone 2.0

Parrot AR.Drone – это радиоуправляемый квадрокоптер, то есть вертолет с четырьмя несущими винтами, размещенных на выносных диагональных балках. Сам AR.Drone работает под управлением операционной системы Linux, а в качестве пульта ДУ к квадрокоптеру может выступать практически любой сенсорный смартфон и планшет на Android или iOS. Дистанция устойчивого управления по Wi-Fi – от 25 до 100 метров и зависит от помещения и погодных условий, если полеты происходят на улице.

​Из-за низкой стоимости, большого количества качественных сенсоров, а так же благодаря открытому API, AR.Drone стал популярной платформой для научных экспериментов и образовательных целей. Он применяется в работах по автоматическому управлению, обучению AI, автономному видеонаблюдению, взаимодействию человек-машина, и т.д.

У меня возникло желание организовать голосовое управление AR.Drone из ROS, чтобы в перспективе он работал в паре с роботом Turtlebot.

Драйвер квадрокоптера ArDrone 2.0 для ROS

Ardrone_autonomy является ROS драйвером для квадрокоптера Parrot ArDrone. Поддерживает квадрокоптеры ArDrone 1.0 и ArDrone 2.0. Этот пакет является ответвлением пакета ArDrone Brown. Пакет позволяет получать сообщения с датчиков ArDrone, получать изображения с камер, управлять движением квадрокоптера и свечением светодиодов.
Установка пакета ArDrone autonomy. Сначала клонируем код в директорию пакетов (ROS_PACKAGE_PATH — у меня ros_pkgs)

$ cd ~/ros_pkgs
$ git clone https://github.com/AutonomyLab/ardrone_autonomy.git
$ rosstack profile && rospack profile
$ roscd ardrone_autonomy

Далее — компиляция ArDrone SDK 2.0. Запускаем скрипт build_sdk.sh

$ ./build_sdk

Если компиляция прошла успешно — проверяем содержимое каталога lib

$ ls ./lib

Должно быть так:

libavcodec.a  libavformat.a    libpc_ardrone_notool.a  libvlib.a
libavdevice.a  libavutil.a    libsdk.a
libavfilter.a  libpc_ardrone.a  libswscale.a

И сборка пакета

rosmake ardrone_autonomy

Для запуска драйвера

rosrun ardrone_autonomy ardrone_driver

Cписок тем для публикации данных драйвера ardrone_autonomy

/ardrone/bottom/camera_info
/ardrone/bottom/image_raw
/ardrone/bottom/image_raw/compressed
/ardrone/bottom/image_raw/compressed/parameter_descriptions
/ardrone/bottom/image_raw/compressed/parameter_updates
/ardrone/bottom/image_raw/theora
/ardrone/bottom/image_raw/theora/parameter_descriptions
/ardrone/bottom/image_raw/theora/parameter_updates
/ardrone/camera_info
/ardrone/front/camera_info
/ardrone/front/image_raw
/ardrone/front/image_raw/compressed
/ardrone/front/image_raw/compressed/parameter_descriptions
/ardrone/front/image_raw/compressed/parameter_updates
/ardrone/front/image_raw/theora
/ardrone/front/image_raw/theora/parameter_descriptions
/ardrone/front/image_raw/theora/parameter_updates
/ardrone/image_raw
/ardrone/image_raw/compressed
/ardrone/image_raw/compressed/parameter_descriptions
/ardrone/image_raw/compressed/parameter_updates
/ardrone/image_raw/theora
/ardrone/image_raw/theora/parameter_descriptions
/ardrone/image_raw/theora/parameter_updates
/ardrone/imu
/ardrone/land
/ardrone/mag
/ardrone/navdata
/ardrone/reset
/ardrone/takeoff
/cmd_vel
/tf

Список сервисов драйвера ardrone_autonomy

/ardrone/bottom/image_raw/compressed/set_parameters
/ardrone/bottom/image_raw/theora/set_parameters
/ardrone/bottom/set_camera_info
/ardrone/flattrim
/ardrone/front/image_raw/compressed/set_parameters
/ardrone/front/image_raw/theora/set_parameters
/ardrone/front/set_camera_info
/ardrone/image_raw/compressed/set_parameters
/ardrone/image_raw/theora/set_parameters
/ardrone/imu_recalib
/ardrone/setcamchannel
/ardrone/setflightanimation
/ardrone/setledanimation
/ardrone/togglecam
/ardrone_driver/get_loggers
/ardrone_driver/set_logger_level

Информацию, полученную от квадрокоптера, драйвер публикует в тему ardrone/navdata. Тип сообщения ardrone_autonomy::Navdata
Предоставляется следующая информация
header: ROS message header

batteryPercent: оставшегося заряда батареи дрона (%)
state: статус ArDropne
0: не определен 1: Inited 2: на земле 3,7: в полете 4: Hovering 5: Test (?) 6: не включен 8: Landing 9: Looping (?)

rotx: левый / правый наклон в градусах (поворот вокруг оси X)
roty: Вперед / назад, наклон в градусах (поворот вокруг оси Y)
rotz: Ориентация в градусах (поворот вокруг оси Z)
magX, magY, magZ: магнитометра (только AR-Drone 2,0 )
pressure: давление воспринимается барометр дрона (только AR-Drone 2,0 )
temp : температура воспринимается датчиком дрона
wind_speed: Расчетная скорость ветра (только AR-Drone 2,0 )
wind_angle: Расчетный угол ветра (только AR-Drone 2,0 )
wind_comp_angle: Предполагаемый угол компенсации ветра (только AR-Drone 2,0 )
altd: Расчетная высота (мм)
vx, vy, vz: Линейная скорость (мм / с)
ax, ay, az: линейное ускорение (G)
tm: Timestamp из данных, возвращаемых Drone
В экспериментальную тему Base публикуются сообщения типа sensor_msg/Imu, выдающие показания линейного ускорения, угловой скорости и ориентации устройчтва по осям x, y, z.

Камеры

Оба AR-Drone 1,0 и 2,0 оснащен двумя камерами. Одна фронтальная камера направлена вперед и одна вертикальную камеру вниз. Драйвер ardrone_driver создает три темы ardrone/image_raw, ardrone/front/image_raw and ardrone/bottom/image_raw. В каждую из этих тем публикуются сообщения типа image_transport

Для вывода на камеру (текущую)

rosrun image_view image_view image:=/ardrone/image_raw

или на конкретную (допустим front)

rosrun image_view image_view image:=/ardrone/front/image_raw

Отправка команд для AR-Drone

Взлет — отправка пустого сообщения в тему ardrone/takeoff

Посадка — отправка пустого сообщения в тему ardrone/land

Сброс параметров(аварийная остановка) — отправка пустого сообщения в тему ardrone/reset

rostopic pub /ardrone/land std_msgs/Empty

После взлета для управления движением ArDrone необходимо посылать сообщения типа geometry_msgs::Twist в тему cmd_vel
-Linear.x: двигаться назад
+ Linear.x: двигаться вперед
-Linear.y: переместить вправо
+ Linear.y: движение влево
-Linear.z: двигаться вниз
+ Linear.z: двигаться вверх

-Angular.z: повернуть налево
+ Angular.z: повернуть направо

Диапазон для каждого компонента должно быть от -1,0 до 1,0. Максимальный диапазон может быть настроен с помощью ROS параметры обсуждаются далее в этом документе. Публикация «0» значение для всех компонентов сделает команду держать зависания.

rostopic pub -r 10 /cmd_vel geometry_msgs/Twist  '{linear:  {x: 0.1, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}'

Светодиодные анимации

Вызов службы ardrone/setledanimation будет вызывать выполнение одной из 14 предопределенных светодиодной анимаций для ArDrone.
Параметры

uint8 типов : тип анимации, который является число в диапазоне [0 .. 13];
float32 частоты : частота анимации в Гц;
uint8 продолжительность : продолжительность анимации в секундах.
Тип параметра анимации:

BLINK_GREEN_RED;
BLINK_GREEN;
BLINK_RED;
BLINK_ORANGE;
SNAKE_GREEN_RED;
FIRE;
STANDARD;
RED;
GREEN;
RED_SNAKE;
BLANK;
LEFT_GREEN_RIGHT_RED;
LEFT_RED_RIGHT_GREEN;
BLINK_STANDARD.
Эти анимации можно протестировать в командной строке, например

rosservice call /ardrone/setledanimation 1 4 5
 

Полетные анимации

Вызов службы ardrone/setflightanimation будет выполнять одну из 20 предопределенных полетных анимаций (полетных фигур) для ArDrone. Параметры:

uint8 типов : тип полета анимация, число в диапазоне [0 .. 19]
uint16 продолжительность : продолжительность анимации. Используйте 0 для длительности по умолчанию (рекомендуется)

ARDRONE_ANIM_PHI_M30_DEG;
ARDRONE_ANIM_PHI_30_DEG;
ARDRONE_ANIM_THETA_M30_DEG;
ARDRONE_ANIM_THETA_30_DEG;
ARDRONE_ANIM_THETA_20DEG_YAW_200DEG;
ARDRONE_ANIM_THETA_20DEG_YAW_M200DEG;
ARDRONE_ANIM_TURNAROUND;
ARDRONE_ANIM_TURNAROUND_GODOWN;
ARDRONE_ANIM_YAW_SHAKE;
ARDRONE_ANIM_YAW_DANCE;
ARDRONE_ANIM_PHI_DANCE;
ARDRONE_ANIM_THETA_DANCE;
ARDRONE_ANIM_VZ_DANCE;
ARDRONE_ANIM_WAVE;
ARDRONE_ANIM_PHI_THETA_MIXED;
ARDRONE_ANIM_DOUBLE_PHI_THETA_MIXED;
ARDRONE_ANIM_FLIP_AHEAD;
ARDRONE_ANIM_FLIP_BEHIND;
ARDRONE_ANIM_FLIP_LEFT;
ARDRONE_ANIM_FLIP_RIGHT.

Эти анимации можно протестировать в командной строке, например

rosservice call /ardrone/setflightanimation 1 0

Полетные анимации можно запустить во время полета ArDrone.

Можно попробовать поуправлять ArDrone и с клавиатуры

rosrun teleop_twist_keyboard teleop_twist_keyboard.py

Но я бы не советовал — управлять очень трудно — пара жестких падений квадрокоптера заставила меня отказаться от этой идеи.

Для дальнейшей работы необходимо было организовать управление Ardrone c помощью джойстика. Как я подключал джойстик рассказано здесь.

Далее — Распознование голоса с помощью julius — Часть 2


Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Arduino Bluetooth CraftDuino DIY Google IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение