Робономика 2018. Инженерный интенсив. Домашка

На второй день интенсива был запланирован еще один топик – ROS. Но в связи с большим объемом работ данная тема была перенесена на домашнее изучение. ROS (Robot Operating System) – это система для написания ПО для роботов. Т.е. с помощью ROS мы будем разрабатывать пакеты (или прикладное ПО) для кибер-физических систем.

Покажем, как работает ROS на примере черепашки (turlesim).

Для удобства ставим терминальный мультиплексор tmux. Подробнее как тут.

Далее, чтобы начать работать с ROS, запускаем roscore.

В новом терминале запускаем ноду turtlesim:

Пробуем поуправлять черепашкой вручную. Для этого в новом терминале запускаем turtle_teleop_key и с помощью стрелок на клавиатуре двигаем черепашку:

Далее устанавливаем динамический граф того, что происходит в системе через rqt_graph:

Из данной блок-схемы видно, что нода /teleop_turtle, отвечающая за скорость движения черепашки, передает сообщение в топик /turtle1/cmd_vel, а нода /turtlesim,отвечающая за графическое изображение процесса, получает сообщение от ноды /teleop_turtle из этого топика.
Из данной блок-схемы видно, что нода /teleop_turtle, отвечающая за скорость движения черепашки, передает сообщение в топик /turtle1/cmd_vel, а нода /turtlesim,отвечающая за графическое изображение процесса, получает сообщение от ноды /teleop_turtle из этого топика.

Чтобы «послушать» данные, опубликованные в топике /turtle1/cmd_vel, используем rostopic echo.

Переходим в терминал turtle_teleop_key. На левой части консоли видим результаты вывода команды rostopic echo, в правой части - управляем черепашкой с помощью стрелочек:

Возвращаемся к rqt_graph, обновляем и видим, что наша нода, вызванная командой rostopic echo, теперь тоже подписана на топик /turtle1/cmd_vel:

Переходим ROS messages. Коммуникация между нодами происходит посредством обмена сообщениями между publisher (в нашем случае turtle_teleop_key) и subscriber (в нашем случае turtlesim_node). Для коммуникации необходимо, чтобы сообщения имели одинаковый тип. Это означает, что тип топика определяется типом сообщения, опубликованного в нем. Чтобы определить тип сообщения используем rostopic type.

Попробуем опубликовать сообщение через rostopic pub /turtle/cmd_vel:

В окне TurtleSim мы можем увидеть, что черепашка переместилась по заданному вектору.
В окне TurtleSim мы можем увидеть, что черепашка переместилась по заданному вектору.

Чтобы посмотреть данные, опубликованные turtlesim, используем rostopic echo /turtle1/pose:

Далее мы можем посмотреть эти данные в виде графика с помощью rqt_plot:

В появившемся окне rqt_plot можно ввести /turtle1/pose/x и /turtle1/pose/y, после чего будет построен график.

Что дальше?

Следующим этапом будем работать над симуляцией умного города - чат Робономики.