Практическое Использование Ros На Raspberry Pi — Часть 4

Это последняя четвертая статья, запланированная в ряд .

В этой статье я расскажу об использовании джойстика PS3 Dualshock для управления роботом через ROS на примере управления простым сервоприводом, который использовался в руководство для rosserial_arduino. Кому интересно, смотрите кат.



Установка поддержки джойстика PS3 (Dualshock)

Нам понадобится сам джойстик PS3 Dualshock.

Практическое использование ROS на Raspberry Pi — часть 4

и адаптер Bluetooth, например этот

Практическое использование ROS на Raspberry Pi — часть 4

Я также использую крепление для камеры (например, такой ), сервоуправление:

Практическое использование ROS на Raspberry Pi — часть 4

Скрипт RetroPie-Setup нам понадобится для установки аппаратной поддержки джойстика Dualshock на Raspberry Pi. Давайте скачаем это отсюда и установите:
  
  
  
  
  
  
  
  
  
  
  
  
  
   

git clone https://github.com/RetroPie/RetroPie-Setup.git cd RetroPie-Setup/ sudo .

/retropie_setup.sh

Сначала выберите «Обновить настройку ReproPie».

Затем снова запускаем скрипт Retropie_setup.sh. Выберите «Настройка/Конфигурация» > «310 Установить/подключить контроллер PS3».

Следуйте инструкциям и установите.

После завершения установки вам нужно будет подключить джойстик к USB-порту и нажать «ОК».

После этого нужно отключить джойстик от USB-порта и нажать круглую кнопку PS. Bluetooth-соединение будет установлено.

Джойстик теперь сопряжен и готов к использованию.

Проверить джойстик можно с помощью графической утилиты jstest-gtk:

sudo apt-get install jstest-gtk.

Запустим утилиту:

jstest-gtk

Интерфейс программы очень простой.



Практическое использование ROS на Raspberry Pi — часть 4

Попробуйте нажать кнопки, и вы сразу увидите, как индикаторы выполнения рядом с соответствующими названиями осей для кнопок-заставок начинают меняться или кнопки загораются при нажатии кнопки.

После нажатия кнопок вы увидите следующую картинку

Практическое использование ROS на Raspberry Pi — часть 4

После нажатия кнопки «бампер» вы увидите следующую картину

Практическое использование ROS на Raspberry Pi — часть 4

Для использования джойстика в ROS необходимо установить соответствующие пакеты:

rosinstall_generator ros_comm joystick_drivers image_transport --rosdistro indigo --deps --wet-only --exclude roslisp --tar > indigo-custom_ros.rosinstall wstool update -t src rosdep install --from-paths src --ignore-src --rosdistro indigo -y -r --os=debian:jessie sudo .

/src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/indigo

Стек joystick_drivers включает в себя все необходимые узлы и драйверы.

Основная цель этого стека — преобразовать события джойстика в сообщения ROS. В частности, нам понадобится узел радости.

Подробное описание его можно найти на страница вместе с обучающими материалами Здесь И Здесь .



Использование джойстика от ROS

Для начала давайте запустим узел радости:

rosrun joy joy_node

Подключаем джойстик, нажимаем круглую кнопку питания PS и делаем:

rostopic echo joy

Вывод будет примерно таким:

--- axes: (0.0, 0.0, 0.0, 0.0) buttons: (0, 0, 0, 0, 0) --- axes: (0.0, 0.0, 0.0, 0.12372203916311264) buttons: (0, 0, 0, 0, 0) --- axes: (0.0, 0.0, -0.18555253744125366, 0.12372203916311264) buttons: (0, 0, 0, 0, 0) ---

Сообщения, публикуемые узлом радости, имеют тип Sensor_msgs/Joy и включают линейную и угловую скорость.

Значения скорости включены в поле осей: первое значение определяет угловую скорость, второе — линейную скорость.

Посмотреть структуру сообщений Joy можно с помощью команды:

rosmsg show sensor_msgs/Joy

Команда покажет следующую структуру:

std_msgs/Header header uint32 seq time stamp string frame_id float32[] axes int32[] buttons

Мы создадим скетч для управления сервоприводом.

Давайте создадим эскиз.

Для управления сервоприводом нам понадобится библиотека Ардуино сервопривод .

Подключение сервопривода к Arduino можно увидеть в руководство .

Пишем эскиз.

Во-первых, давайте добавим файл заголовка для сообщений Sensor_msgs/Joy вверху файла:

#include <sensor_msgs/Joy.h>

Добавим заголовочные файлы для библиотеки Servo и для ROS:

#include <Servo.h> #include <ros.h>

Ниже приведен стандартный код скетча rosserial_arduino:

ros::NodeHandle nh; Servo servo; // Indices of components in joy message int linear_ind = 1; int angular_ind = 0; void servo_cb(const sensor_msgs::Joy& joy) { float angular = joy.axes[angular_ind]; float linear = joy.axes[linear_ind]; int cur_pos = servo.read(); if(angular > 0) { nh.loginfo("Turn left"); cur_pos = cur_pos - 20; servo.write(cur_pos); } else if(angular < 0) { nh.loginfo("Turn right"); cur_pos = cur_pos + 20; servo.write(cur_pos); } } ros::Subscriber<sensor_msgs::Joy> sub("joy", &servo_cb); void setup() { pinMode(13, OUTPUT); nh.initNode(); nh.subscribe(sub); servo.attach(9); // attach it to pin 9 } void loop() { nh.spinOnce(); delay(1); }

В методе настройки привязываем сервопривод к пину 9 и проводим стандартную инициализацию узла rosserial_arduino. В эскизе следует обратить внимание на линии:

// Indices of components in joy message int linear_ind = 1; int angular_ind = 0;

, где указываем индексы значений угловой и линейной скорости в массиве axes в сообщении Sensor_msgs/Joy. Мы просто создаем подписчика на тему радости и обрабатываем полученное сообщение в методе servo_cb. Здесь мы извлекаем значения угловой и линейной скорости.

В этом эскизе мы используем только угловую скорость, поскольку определяем вращение сервопривода.

Направление вращения определяется исходя из соотношения кнопок джойстика и направления осей.

Пример двух основных кнопок «бампера» можно увидеть на изображении с страницы .



Практическое использование ROS на Raspberry Pi — часть 4

Здесь указано, что ось 16 задает вращение (левое нажатие – положительное значение, правое – отрицательное).

В соответствии с этим правилом на эскизе определяется поворот влево-вправо (угловая скорость – угловое поле).

Ось 17 задает движение вперед – назад: вперед – положительное, назад – отрицательное.

Значения этой оси соответствуют линейной скорости (линейному полю):

float linear = joy.axes[linear_ind];

Используя крепление для камеры, вы можете установить плату камеры Raspberry Pi и управлять ею, вращая сервопривод:

Практическое использование ROS на Raspberry Pi — часть 4

Таким способом можно написать логику контроллера для мобильного робота, определив действия по управлению для определенных кнопок джойстика (управление кнопкой «бампер» с помощью наклона или с помощью кнопок вверх-вниз-влево-вправо).

Как видите, джойстику для управления роботом можно найти множество применений.

Все это возможно благодаря тому, что ROS предоставляет удобный интерфейс для подключения джойстика PS3 Dualshock к роботу на платформе Raspberry Pi и позволяет очень легко реализовать логику управления различными сервоприводами робота.

Желаю всем удачи в проектах по робототехнике с использованием ROS и Raspberry Pi! Теги: #Raspberry Pi #Робототехника #arduino #ros #robotics #rosserial

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.