Управление роботом
В текущей модели робота (и многих других), управление перемещением происходит при помощи публикации специального сообщения, в котором мы указываем параметры желаемой скорости, а именно ее угловую и линейную составляющую. Эти данные из топика получает Подписчик, который работает на плате расширения, и далее отдает команды на моторы колес робота. Для того чтобы наш робот начал движение, нам достаточно опубликовать правильное сообщение в нужный топик.
Робот продолжает выполнять последнюю полученную команду, до момента пока не получит новую. Даже если вы остановите публикацию в топик, робот продолжит движение согласно последней полученной команды.
Для остановки робота необходимо отправить данные с нулевыми скоростями, или выдернуть предохранительную чеку на роботе.
В инструкции указано, что робот выполняет команды, которые публикуются в топик /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