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