CraftDuino v2.0
  • - это CraftDuino - наш вариант полностью Arduino-совместимой платы.
  • CraftDuino - настоящий конструктор, для очень быстрого прототипирования и реализации идей.
  • Любая возможность автоматизировать что-то с лёгкостью реализуется с CraftDuino!
Просто добавьте CraftDuino!

Голосовое управление квадрокоптером 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

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.