Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Передвижение робота

Что вы узнаете в этом разделе:

  • Как проверить работоспособность робота через web-интерфейс
  • Как управлять роботом через топик /cmd_vel
  • Структуру сообщения geometry_msgs/msg/Twist
  • Как заставить робота двигаться прямо, поворачивать и останавливаться
  • Как использовать автодополнение при работе с командами ROS2
  • Правила безопасности при управлении роботом

Используем web-интерфейс

Для начала, начнем с самого простого. Проверим что робот вообще может двигаться.

Проще всего это сделать, если зайти на web-сервер робота и при помощи клавиш AWSD "поездить" роботом.

Веб интерфейс доступен в браузере, по IP адресу вашего робота на порту 8080 например:

http://192.168.1.100:8080/

Как управлять роботом

У нашего робота (и многих других), управление перемещением происходит при помощи публикации специального сообщения, в котором мы указываем параметры желаемой скорости, а именно ее угловую и линейную составляющую. Эти данные из топика получает Подписчик, который работает на системной плате робота, и далее отдает команды на моторы колес. Для того чтобы наш робот начал движение, нам достаточно опубликовать правильное сообщение в нужный топик.

important

Робот продолжает выполнять последнюю полученную команду до момента, пока не получит новую. Даже если вы остановите публикацию в топик, робот продолжит движение согласно последней полученной команде.

Для остановки робота необходимо отправить данные с нулевыми скоростями, или нажать на роботе кнопку stop на плате, рядом с правым колесом

В инструкции указано, что робот выполняет команды, которые публикуются в топик /cmd_vel. Давайте поймем какой вид сообщения нам необходимо сформировать для этого топика.

Выполним команду

ros2 topic info /cmd_vel
====
Type: geometry_msgs/msg/Twist
Publisher count: 0
Subscription count: 1

Мы видим, что для движения робота необходимо использовать сообщение типа geometry_msgs/msg/Twist

Сообщение geometry_msgs/msg/Twist

Управление роботом, происходит при помощи публикации в топик /cmd_vel сообщений типа geometry_msgs/msg/Twist содержащих два трехмерных вектора (x,y,z), вектор линейной скорости (скорости движения точки центра робота) и угловой скорости (скорости вращения робота вокруг оси проходящей через центр лидара робота).

Такое сообщение подходит для управления большинством колесных роботов под управлением ROS.

Давайте посмотрим какие параметры содержит это сообщение.

Выполним команду:

ros2 interface show geometry_msgs/msg/Twist
===
Vector3  linear
	float64 x
	float64 y
	float64 z
Vector3  angular
	float64 x
	float64 y
	float64 z

Мы видим в сообщении два вектора linear и angular. Значение переменной linear.x соответствует линейной скорости робота по оси X (движение прямо). Значение переменной angular.z соответствует вращению робота вокруг оси Z.

Для определения направления вращения робота, нужно пользоваться правилом буравчика. Также на рисунке ниже показаны направления осей X Y Z робота.

Правило буравчика

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

Движение робота

Проще всего заставить двигаться робота -- это воспользоваться командой topic pub утилиты ros2, которая позволяет просто отправлять сообщения в топик ROS прямо из терминала.

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

ros2 topic pub /cmd_vel geometry_msgs/msg/Twist "linear:
  x: 0.1
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0"

Мы увидим вывод работы программы, а робот начнет движение прямо по оси X

publisher: beginning loop
publishing #1: geometry_msgs.msg.Twist(linear=geometry_msgs.msg.Vector3(x=0.1, y=0.0, z=0.0), angular=geometry_msgs.msg.Vector3(x=0.0, y=0.0, z=0.0))

publishing #2: geometry_msgs.msg.Twist(linear=geometry_msgs.msg.Vector3(x=0.1, y=0.0, z=0.0), angular=geometry_msgs.msg.Vector3(x=0.0, y=0.0, z=0.0))

publishing #3: geometry_msgs.msg.Twist(linear=geometry_msgs.msg.Vector3(x=0.1, y=0.0, z=0.0), angular=geometry_msgs.msg.Vector3(x=0.0, y=0.0, z=0.0))

publishing #4: geometry_msgs.msg.Twist(linear=geometry_msgs.msg.Vector3(x=0.1, y=0.0, z=0.0), angular=geometry_msgs.msg.Vector3(x=0.0, y=0.0, z=0.0))

Если все правильно -- робот начнет движение вперед со скоростью 0.1 м/с.

Для остановки робота, нужно снова отправить "скорость", но с нулевыми значениями.

ros2 topic pub /cmd_vel geometry_msgs/msg/Twist "linear:
  x: 0.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0"

Также можно использовать "укороченный" синтаксис, указав только необходимые параметры

ros2 topic pub /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.0}}"

Для того чтобы повторно не вбивать команду, достаточно нажать на клавиатуре кнопку "вверх" и отредактировать параметры предыдущей команды. {% endhint %}

Также на роботе находится "чека" в виде небольшого провода красного цвета, извлечение чеки отключает питание от моторов. Использовать чеку необходимо в экстренных случаях.

Для движения робота по кругу, нам необходимо одновременно задать линейную и угловую скорости.

Выполним команду:

ros2 topic pub /cmd_vel geometry_msgs/msg/Twist "linear:
  x: 0.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 1.0"

Робот начнет вращение вокруг своей оси.

Использование автодополнения (autocomplete)

Вы можете использовать автодополнение (autocomplete) при работе с утилитой ros2 topic pub

Подстановка подходящего имени топика используя <TAB>

ros2 topic pub /cm<TAB> -> ros2 topic pub /cmd_vel

Подстановка типа сообщения <TAB>

ros2 topic pub /cmd_vel g<TAB> -> ros2 topic pub /cmd_vel geometry_msgs/msg/Twist

Подстановка структуры необходимого сообщения \'<TAB>

ros2 topic pub /cmd_vel geometry_msgs/msg/Twist \'<TAB> -> 

ros2 topic pub /cmd_vel geometry_msgs/msg/Twist 'linear:
  x: 0.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0
'