Управление роботом

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

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

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

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

rostopic info /cmd_vel

Type: geometry_msgs/Twist
Publishers: None
Subscribers: None

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

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

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

Для этих целей существует стандартное сообщение ROS geometry_msgs/Twist, при помощи этого сообщения происходит управление большинством "колесных" роботов под управлением ROS.

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

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

rosmsg show geometry_msgs/Twist


geometry_msgs/Vector3 linear
  float64 x
  float64 y
  float64 z
geometry_msgs/Vector3 angular
  float64 x  
  float64 y  
  float64 z

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

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

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

Как управлять роботов в ROS: https://youtu.be/oDrbVK1tDA8

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

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

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

rostopic pub /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"

Подсказка. Во время набора команды, нажмите на Tab (несколько раз) и вы получите предзаполненный шаблон команды (название топика, тип топика, массив значений). Не обязательно все набирать руками.

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

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

rostopic pub /cmd_vel geometry_msgs/Twist "linear:
  x: 0.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0"

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

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

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

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

rostopic pub /cmd_vel geometry_msgs/Twist "linear:
  x: 0.1
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 1.0"

Робот начнет движение по окружности.

Пример создания программы Издатель для реального робота: https://youtu.be/ZFB5oourBfg

results matching ""

    No results matching ""