Этот пример исследует, как добавить и получить параметры на сервере параметра ROS. Сервер параметра обычно работает на том же устройстве, которое запускает ведущее устройство ROS. Параметры доступны глобально по сети ROS и могут использоваться, чтобы хранить статические данные, такие как параметры конфигурации. Поддерживаемые типы данных включают строки, целые числа, удваивается, logicals и массивы ячеек.
Предпосылки: Запуск с ROS, соединитесь с сетью ROS
Запустите ведущее устройство ROS и сервер параметра в MATLAB®.
rosinit
Initializing ROS master on http://bat6230glnxa64:40799/. Initializing global node /matlab_global_node_60354 with NodeURI http://bat6230glnxa64:38231/
Создайте объект дерева параметра взаимодействовать с сервером параметра. Дерево параметра позволяет вам взаимодействовать с сервером параметра и обеспечивает функции, такие как set
, get
, del
, has
и search
. Поскольку мы запустили новый сервер параметра в этом примере, никакие параметры в настоящее время не хранятся там.
ptree = rosparam
ptree = ParameterTree with properties: AvailableParameters: {}
Чтобы установить параметр для IP-адреса робота, используйте название параметра ROBOT_IP
. Проверяйте, существует ли параметр с тем же именем уже. Используйте функцию
has
.
has(ptree,'ROBOT_IP')
ans = logical
0
Если has
возвращает 0 (FALSE) как вывод, то это означает в настоящее время, что имя ROBOT_IP
не могло быть найдено на сервере параметра.
Добавьте некоторые параметры, указывающие на IP-адрес робота к серверу параметра. Используйте функцию
set
с этой целью.
set(ptree,'ROBOT_IP','192.168.1.1'); set(ptree, '/myrobot/ROBOT_IP','192.168.1.100');
Параметры ROBOT_IP
теперь доступны всем узлам, соединенным с этим ведущим устройством ROS. Можно задать параметры в пространстве имен. Например, параметр /myrobot/ROBOT_IP
в пространстве имен /myrobot
в этом примере.
Установите больше параметров с различными типами данных.
set(ptree,'MAX_SPEED',1.5);
Используйте массив ячеек в качестве входа к функции set
. Установите параметр, который имеет целевые координаты {x, y, z} для робота.
set(ptree,'goal',{5.0,2.0,0.0});
Установите дополнительные параметры, чтобы заполнить сервер параметра.
set(ptree, '/myrobot/ROBOT_NAME','TURTLE'); set(ptree, '/myrobot/MAX_SPEED',1.5); set(ptree, '/newrobot/ROBOT_NAME','NEW_TURTLE');
Предположим, что вы хотите получить IP-адрес робота от параметра ROBOT_IP
, потому что вы хотите использовать этот IP-адрес, чтобы соединиться с этим роботом. Существует два параметра с именем ROBOT_IP
в нем, но вы только хотите IP-адрес myrobot
. Можно получить это значение параметров с помощью функции
get
:
robotIP = get(ptree, '/myrobot/ROBOT_IP')
robotIP = '192.168.1.100'
Чтобы получить целый список параметров, сохраненных на сервере параметра, осмотрите свойство AvailableParameters
. Список будет содержать все параметры, которые вы добавили в предыдущих разделах.
plist = ptree.AvailableParameters
plist = 7x1 cell array
{'/MAX_SPEED' }
{'/ROBOT_IP' }
{'/goal' }
{'/myrobot/MAX_SPEED' }
{'/myrobot/ROBOT_IP' }
{'/myrobot/ROBOT_NAME' }
{'/newrobot/ROBOT_NAME'}
Можно также использовать функцию
set
, чтобы изменить значения параметров. Обратите внимание на то, что модификация параметра необратима, поскольку сервер параметра просто перезапишет параметр с новым значением. Можно проверить, существует ли параметр уже при помощи функции
has
.
Измените параметр MAX_SPEED:
set(ptree, 'MAX_SPEED', 1.0);
Измененное значение может иметь различный тип данных от ранее присвоенного значения. Например, значение параметра MAX_SPEED в настоящее время типа double. Установите значение строки для параметра MAX_SPEED:
set(ptree, 'MAX_SPEED', 'none');
Можно удалить параметр из сервера параметра с помощью функции
del
.
Удалите параметр goal
.
del(ptree, 'goal');
Проверяйте, был ли параметр goal
удален. Используйте функцию
has
.
has(ptree, 'goal')
ans = logical
0
Вывод является 0 (FALSE), что означает, что параметр был удален из сервера параметра.
Ищите все параметры, которые содержат 'myrobot'
с помощью search
команды:
results = search(ptree, 'myrobot')
results = 1x3 cell array
{'/myrobot/MAX_SPEED'} {'/myrobot/ROBOT_IP'} {'/myrobot/ROBOT_...'}
Закройте ведущее устройство ROS и удалите глобальный узел.
rosshutdown
Shutting down global node /matlab_global_node_60354 with NodeURI http://bat6230glnxa64:38231/ Shutting down ROS master on http://bat6230glnxa64:40799/.
Для примеров приложения см. Запуск с Gazebo и Моделируемым TurtleBot или Запуск с Действительным TurtleBot примеры.