Операционная система робота (ROS) является коммуникационным интерфейсом, который позволяет различным частям системы робота обнаружить друг друга, и отправить и получить данные между ними. MATLAB® поддерживает ROS с библиотекой функций, которая позволяет вам обмениваться данными с поддерживающими ROS физическими роботами или средствами моделирования робота, такими как Gazebo®.
Этот пример вводит как:
Настройте ROS в MATLAB
Получите информацию о возможностях в сети ROS
Получите информацию о сообщениях ROS
Сеть ROS включает различные части системы робота (такие как планировщик или интерфейс камеры), которые связываются по ROS. Сеть может быть распределена по нескольким машинам.
Ведущее устройство ROS координирует различные части сети ROS. Это идентифицировано Основным URI (Унифицированный идентификатор ресурса), который задает имя узла или IP-адрес машины, куда ведущее устройство запускается.
Узел ROS содержит набор связанных возможностей ROS (таких как издатели, подписчики и сервисы). Сеть ROS может иметь много узлов ROS.
Издатели, подписчики и сервисы являются различными видами сущностей ROS, которые обрабатывают данные. Они обмениваются данными с помощью сообщений.
Издатель отправляет сообщения в определенную тему (такие как "одометрия"), и подписчики на ту тему получают те сообщения. Одна тема может быть сопоставлена с несколькими издателями и подписчиками.
Для получения дополнительной информации смотрите Операционную систему робота (ROS) и раздел Concepts по веб-сайту ROS.
Использование rosinit
инициализировать ROS. По умолчанию, rosinit
создает ведущее устройство ROS в MATLAB и запускает глобальный узел, который соединяется с ведущим устройством. Глобальный узел автоматически используется другими функциями ROS.
rosinit
Launching ROS Core... ..............................Done in 5.6997 seconds. Initializing ROS master on http://192.168.203.1:58232. Initializing global node /matlab_global_node_79626 with NodeURI http://ah-sradford:49876/
Использование rosnode
list
видеть все узлы в сети ROS. Обратите внимание на то, что единственный доступный узел является глобальным узлом, созданным rosinit
.
rosnode list
/matlab_global_node_79626
Используйте exampleHelperROSCreateSampleNetwork
заполнить сеть ROS с тремя дополнительными узлами и демонстрационными издателями и подписчиками.
exampleHelperROSCreateSampleNetwork
Используйте rosnode list
снова видеть три новых узла (node_1
, node_2,
и node_3
).
rosnode list
/matlab_global_node_79626 /node_1 /node_2 /node_3
Рисунок показывает текущее состояние сети ROS. Глобальный узел MATLAB отключается, поскольку он в настоящее время не имеет никаких издателей, подписчиков или сервисов.
Используйте rostopic
list
видеть доступные темы в сети ROS. Существует четыре активных темы: /pose
, /rosout
, /scan and /tf
. Темы по умолчанию: rosout and 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://ah-sradford:49883/) Subscribers: * /node_2 (http://ah-sradford:49889/)
Использование 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://ah-sradford:49883/] 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. Сервисный клиент отправляет сообщение запроса в сервисный сервер, который обрабатывает информацию в запросе и возвращается с сообщением ответа (см. Call and Provide ROS Services).
Использование rosservice
list
видеть все доступные сервисные серверы в сети ROS. Команда ниже показов, что два сервиса (/add
и /reply
) доступны наряду с сервисами регистратора по умолчанию всех узлов.
rosservice list
/add /matlab_global_node_79626/get_loggers /matlab_global_node_79626/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://ah-sradford:49894 Type: roscpp_tutorials/TwoInts Args: a b
Издатели, подписчики и сервисы используют сообщения ROS, чтобы обмениваться информацией. Каждое сообщение 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_79626 with NodeURI http://ah-sradford:49876/ Shutting down ROS master on http://192.168.203.1:58232.