Robot Operating System (ROS) - коммуникационный интерфейс, позволяющий различным частям роботизированной системы обнаруживать друг друга, а также отправлять и получать данные между ними. MATLAB ® поддерживает ROS с библиотекой функций, которая позволяет обмениваться данными с физическими роботами с поддержкой ROS или роботами-симуляторами, такими как Gazebo ®.
В этом примере описывается следующее:
Настройка ROS в MATLAB
Получение информации о возможностях сети ROS
Получение информации о сообщениях ROS
Сеть АФК включает в себя различные части роботизированной системы (например, планировщик или интерфейс камеры), которые осуществляют связь через АФК. Сеть может быть распределена по нескольким машинам.
Мастер ROS координирует различные части сети ROS. Он идентифицируется главным URI (унифицированным идентификатором ресурса), который указывает имя хоста или IP-адрес машины, на которой выполняется мастер.
Узел 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.
Использовать 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.