exponenta event banner

Начало работы с ROS

Robot Operating System (ROS) - коммуникационный интерфейс, позволяющий различным частям роботизированной системы обнаруживать друг друга, а также отправлять и получать данные между ними. MATLAB ® поддерживает ROS с библиотекой функций, которая позволяет обмениваться данными с физическими роботами с поддержкой ROS или роботами-симуляторами, такими как Gazebo ®.

В этом примере описывается следующее:

  • Настройка ROS в MATLAB

  • Получение информации о возможностях сети ROS

  • Получение информации о сообщениях ROS

Терминология АФК

  • Сеть АФК включает в себя различные части роботизированной системы (например, планировщик или интерфейс камеры), которые осуществляют связь через АФК. Сеть может быть распределена по нескольким машинам.

  • Мастер ROS координирует различные части сети ROS. Он идентифицируется главным URI (унифицированным идентификатором ресурса), который указывает имя хоста или IP-адрес машины, на которой выполняется мастер.

  • Узел ROS содержит набор связанных возможностей ROS (таких как издатели, подписчики и услуги). Сеть ROS может иметь множество узлов ROS.

  • Издатели, подписчики и службы - это различные типы объектов ROS, обрабатывающих данные. Они обмениваются данными с помощью сообщений.

  • Издатель отправляет сообщения в определенный раздел (например, «одометрия»), и подписчики на этот раздел получают эти сообщения. Одна тема может быть связана с несколькими издателями и подписчиками.

Дополнительные сведения см. в разделе Операционная система робота (ROS) и разделе Концепции на веб-сайте ROS.

Инициализация сети ROS

Использовать rosinit для инициализации ROS. По умолчанию rosinit создает основную запись ROS в MATLAB и запускает глобальный узел, связанный с основной записью. Глобальный узел автоматически используется другими функциями ROS.

rosinit
Launching ROS Core...
Done in 0.85388 seconds.
Initializing ROS master on http://192.168.0.10:51035.
Initializing global node /matlab_global_node_76841 with NodeURI http://bat6315glnxa64:34299/

Использовать rosnode list для просмотра всех узлов в сети ROS. Обратите внимание, что единственным доступным узлом является глобальный узел, созданный rosinit.

rosnode list
/matlab_global_node_76841

Использовать exampleHelperROSCreateSampleNetwork для заполнения сети ROS тремя дополнительными узлами и образцами издателей и подписчиков.

exampleHelperROSCreateSampleNetwork

Использовать rosnode list чтобы снова увидеть три новых узла (node_1, node_2, и node_3).

rosnode list
/matlab_global_node_76841
/node_1
/node_2
/node_3

На рисунке показано текущее состояние сети ROS. Глобальный узел MATLAB отключен, так как в настоящее время у него нет издателей, подписчиков или служб.

Темы

Использовать rostopic list для просмотра доступных тем в сети ROS. Существует четыре активных темы: /pose, /rosout, /scan и /tf. Темы по умолчанию: rosout и tf всегда присутствуют в сети ROS. Две другие темы были созданы как часть примерной сети.

rostopic list
/pose  
/rosout
/scan  
/tf    

Использовать rostopic info <topicname> для получения конкретной информации о конкретной теме. Команда ниже показывает, что /node_1 публикует (отправляет сообщения) /pose тема, и /node_2 подписывается (получает сообщения от) на этот раздел. Дополнительные сведения см. в разделе Обмен данными с издателями и подписчиками ROS.

rostopic info /pose
Type: geometry_msgs/Twist
 
Publishers:
* /node_1 (http://bat6315glnxa64:41117/)
 
Subscribers:
* /node_2 (http://bat6315glnxa64:46331/)

Использовать rosnode info <nodename> для получения информации о конкретном узле. Команда ниже показывает, что node_1 публикует в /pose, /rosout и /tf темы, подписывается на /scan тематика и предоставляет услуги :/ node_1/get_loggers и/ node_1/set_logger_level. Службы регистрации по умолчанию: get_loggers и set_logger_level предоставляются всеми узлами, созданными в сети ROS.

rosnode info /node_1
Node: [/node_1]
URI: [http://bat6315glnxa64:41117/]
 
Publications (3 Active Topics): 
 * /pose
 * /rosout
 * /tf
 
Subscriptions (1 Active Topics): 
 * /scan
 
Services (2 Active): 
 * /node_1/get_loggers
 * /node_1/set_logger_level

Услуги

Услуги ROS обеспечивают механизм обработки вызовов по сети ROS. Клиент службы отправляет сообщение запроса на сервер службы, который обрабатывает информацию в запросе и возвращает ответное сообщение (см. Вызов и предоставление услуг ROS).

Использовать rosservice list для просмотра всех доступных серверов услуг в сети ROS. Команда ниже показывает, что две службы (/add и /reply) доступны вместе со службами регистратора по умолчанию для всех узлов.

rosservice list
/add
/matlab_global_node_76841/get_loggers
/matlab_global_node_76841/set_logger_level
/node_1/get_loggers
/node_1/set_logger_level
/node_2/get_loggers
/node_2/set_logger_level
/node_3/get_loggers
/node_3/set_logger_level
/reply

Использовать rosservice info <servicename> для получения информации о конкретной службе.

rosservice info /add
Node: /node_3
URI: rosrpc://bat6315glnxa64:55281
Type: roscpp_tutorials/TwoInts
Args: MessageType A B

Сообщения

Издатели, подписчики и службы используют сообщения АФК для обмена информацией. Каждое сообщение ROS имеет связанный тип сообщения, который определяет типы данных и структуру информации в этом сообщении (см. Работа с основными сообщениями ROS).

Использовать rostopic type <topicname> для просмотра типа сообщения, используемого разделом. Команда ниже показывает, что /pose раздел использует сообщения типа geometry_msgs/Twist.

rostopic type /pose
geometry_msgs/Twist

Использовать rosmsg show <messagetype> для просмотра свойств типа сообщения. geometry_msgs/Twist тип сообщения имеет два свойства, Linear и Angular. Каждое свойство является сообщением типа geometry_msgs/Vector3, которая в свою очередь имеет три свойства типа double.

rosmsg show geometry_msgs/Twist
% This expresses velocity in free space broken into its Linear and Angular parts.
Vector3  Linear
Vector3  Angular
rosmsg show geometry_msgs/Vector3
% This represents a vector in free space. 
% It is only meant to represent a direction. Therefore, it does not
% make sense to apply a translation to it (e.g., when applying a 
% generic rigid transformation to a Vector3, tf2 will only apply the
% rotation). If you want your data to be translatable too, use the
% geometry_msgs/Point message instead.

double X
double Y
double Z

Использовать rosmsg list для просмотра полного списка типов сообщений, доступных в MATLAB.

Завершение работы сети ROS

Использовать exampleHelperROSShutDownSampleNetwork для удаления образцов узлов, издателей и подписчиков из сети ROS. Эта команда необходима только в том случае, если образец сети был создан ранее с помощью exampleHelperROSStartSampleNetwork.

exampleHelperROSShutDownSampleNetwork

Использовать rosshutdown для отключения сети ROS в MATLAB. Это завершает работу хозяина ROS, который был запущен rosinit и удаляет глобальный узел. Используя rosshutdown является рекомендуемой процедурой после завершения работы с сетью ROS.

rosshutdown
Shutting down global node /matlab_global_node_76841 with NodeURI http://bat6315glnxa64:34299/
Shutting down ROS master on http://192.168.0.10:51035.

Следующие шаги