PS3 контроллер с ROS MoveIt

Робот импортирован, пока работу с ним можно поставить на паузу. В этом посте я буду разбираться с тем, как управлять роботами в ROS и MoveIt с помощью контроллера PS3 SixAxis. 

 
У меня, кстати, оказался китайский аналог от SHANWAN. Поддержка PS3 геймадов появилась в ядре Linux еще в 2006 году, так что при подключении по USB никаких драйверов не требуется: джойстик подхватывается сразу, о чем сигнализируют мигающие индикаторы.

Убедиться, что джойстик появился в системе можно с помощью утилит lsusb или usb-devices. При этом в выдаче lsusb мой китайский девайс отображается как Sony :) Usb-devices обмануть не удалось.

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

# jstest /dev/input/js0

Она позволяет отследить координаты 6 осей и нажатие всех кнопок (их должно быть 17). Проверить калибровку осей, и при необходимости поправить ее можно утилитой jscal:

# jscal -c /dev/input/js0

Я планирую работать с джойстиком из python, поэтому посмотрим, что есть из библиотек и модулей, позволяющих это сделать.

Первой нашлась библиотека - pygame, в которой присутствует модуль joystick. Тестовая программа с использованием pygame определяет джойстик, находит все 6 осей, но только 13 кнопок - без реакции остаются четыре кнопки слева.

Вторая библиотека, которую хотел бы рассмотреть - python-evdev, использующую модуль ядра linux - evdev

Вывести список устройств и проверить функционирование джойстка с помощью evdev можно утилитой evtest (чтобы получить полный список устройств, лучше запускать от root):

# sudo evtest

Если при выполнении теста нет реакции на манипуляции с джойстиком, то после нажатия кнопки PS (c лого) все должно заработать.

А что-же для джойстиков есть в ROS? Да в общем-то, все что нужно - целый набор драйверов на разные случаи жизни. Среди них есть два, поддерживающих PS3: драйвер joy для джойстиков, подключенных по USB и отдельный драйвер ps3joy, использующийся в случае, если джойстик подключен по bluetooth.Так как по bluetooth подключиться у меня не получилось - я буду использовать драйвер joy.

С драйверами идет несколько руководств, позволяющих правильно настроить доступ к джойстику, проверить его работоспособность и написать узел управления для turtlesim. У меня такой узел заработал без проблем, только в файле turtle_joy.launch пришлось поменять пару параметров для того, чтобы управлять черепашкой двумя разными рукоятками: левая для движения вперед/назад и правая для поворота влево/вправо:

<launch>
<!-- Turtlesim Node-->
<node pkg="turtlesim" type="turtlesim_node" name="sim"/>

<!-- joy node -->
<node respawn="true" pkg="joy"
type="joy_node" name="turtle_joy" >
<param name="dev" type="string" value="/dev/input/js0" />
<param name="deadzone" value="0.12" />
</node>

<!-- Axes -->
<param name="axis_linear" value="1" type="int"/>
<param name="axis_angular" value="3" type="int"/>
<param name="scale_linear" value="3" type="double"/>
<param name="scale_angular" value="3" type="double"/>
<node pkg="learning_joy" type="turtle_teleop_joy" name="teleop"/>
</launch>

Параметры scale_linear и scale_angular позволяют менять скорость движения черепашки: сигнал от осей находится в диапазоне 0 ... 1, итоговая скорость движения получается его умножением на эти параметры.

Движение черепашки задается в топике turtle1/cmd_vel (geometry_msgs/Twist), чтобы увидеть сообщения в нем, можно воспользоваться командой

 # rostopic echo /turtle1/cmd_vel

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

---
linear:
  x: 3.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: -3.0
---

Оказалось, что водить черепашку по экрану джойстиком довольно увлекательное занятие :)

 


Джойстик заработал в ROS, можно переходить к следующему этапу - управлять с его помощью импортированным роботом. Для этого я планирую писать модули на python. К счастью, сообщество ROS достаточно большое и в нем есть много примеров того, как это можно сделать. В качестве базового можно воспользоваться этим, который также служит для управления turtlesim. 

Let's go design!

 


 




Комментарии