Запуск с ROS

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

Этот пример представляет, как:

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

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

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

Терминология ROS

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

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

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

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

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

Для получения дополнительной информации смотрите Robot Operating System (ROS) и раздел Concepts на веб-сайте 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 имеет связанный тип сообщения, который определяет типы данных и размещение информации в этом сообщении (См. «Работа с базовыми сообщениями ROS»).

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

rostopic type /pose
geometry_msgs/Twist

Использовать rosmsg show <messagetype> для просмотра свойств типа сообщения. The 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.

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