В этих примерах показано, как получать, устанавливать, сравнивать и управлять параметрами ROS в Simulink ®. Для выполнения этих примеров необходимо сначала настроить сеть ROS с помощьюrosinit. Для установки параметров сети и совместного использования значений со всей сетью запустите сервер параметров ROS с помощью rosparam. Ниже приведены примеры работы с параметрами Simulink, включая использование строковых параметров.
Эта модель получает и задает параметры ROS с помощью Simulink ®. В этом примере показано, как использовать параметры ROS в Simulink и совместно использовать данные в сети ROS. Целочисленное значение устанавливается в качестве параметра в сети ROS. Это целое число извлекается с сервера параметров и сравнивается с константой. Выходное логическое значение из сравнения также устанавливается в сети. Измените блок константы в верхнем левом углу (синем) при запуске модели для установки параметров сети на основе условий пользовательского ввода.
Вы должны быть подключены к сети ROS. Звонить rosinit в командной строке MATLAB ®.

Для создания строкового параметра используйте блок String Constant и преобразуйте его в uint8 с помощью функционального блока MATLAB. Преобразованная строка uint8 передается в блок Set Parameter вместе с дополнительным входом Length, указанным вторым блоком Constant. Значение Length указывает на максимальную ожидаемую длину строки и требуется для всех параметров строки. Дополнительные сведения см. в разделе блок «Задать параметр».

В сетях АФК параметры строк сохраняются как uint8 массив. При получении от сервера строковых параметров они возвращаются в виде char массив. В Simulink ® они отливаются какuint8, поэтому вы должны использовать uint8 при сравнении со строковыми параметрами АФК. Это сравнение можно использовать для запуска подсистем для более крупных моделей или проверки настроек для определенных алгоритмов.
Подключение к сети ROS. Настройте дерево параметров ROS.
rosinit
Launching ROS Core... Done in 0.76143 seconds. Initializing ROS master on http://192.168.0.10:55549. Initializing global node /matlab_global_node_35139 with NodeURI http://bat6315glnxa64:38417/
ptree = rosparam;
Установите параметр ROS, /camera_format, в строковое значение. Можно использовать скаляры строк или векторы символов. Значение сохраняется как uint8 массив на сервере параметров ROS и возвращен как 'jpeg' в MATLAB ®.
set(ptree,"/camera_format","jpeg") pause(1) pvalue = get(ptree,"/camera_format")
pvalue = 'jpeg'
Запустите подключенную модель Simulink ®. Эта модель проверяет, имеет ли ранее заданный параметр формата камеры имя «jpeg». Чтобы удалить параметр с сервера, используйте блок Get Parameter. Затем сравните параметр с вектором символов, приведенным какuint8 из блока Constant, используя функциональный блок MATLAB. Выход 1 означает совпадение параметров.
open_system("rosStringParameterCompare") sim("rosStringParameterCompare");

Завершение работы сети АФК.
rosshutdown
Shutting down global node /matlab_global_node_35139 with NodeURI http://bat6315glnxa64:38417/ Shutting down ROS master on http://192.168.0.10:55549.
stringCompare функция определяется как:
function y = stringCompare(str1,str2) %#codegen minLength = min(length(str1),length(str2)); st1 = str1(1:minLength); st2 = str2(1:minLength); y = all(st1(:)==st2(:));
В этой модели показано, как получить доступ к строковым параметрам и использовать их для запуска операций подсистемы. Он получает формат изображения с сервера параметров настройки ROS. Он извлекается как uint8 массив, сравниваемый с помощью strcmp Функциональный блок MATLAB. При получении нового изображения из блока Subscribe формат: uint8('jpeg'), он запускает блок «Process Image» для выполнения задачи над данными изображения.
Подключитесь к сети ROS и настройте сервер параметров ROS.
rosinit
Launching ROS Core... Done in 0.70103 seconds. Initializing ROS master on http://192.168.0.10:58132. Initializing global node /matlab_global_node_09733 with NodeURI http://bat6315glnxa64:38027/
ptree = rosparam;
Установите "/camera/rgb/image_raw/compressed/format" и настройте издателя для "/camera/rgb/image_raw/compressed" тема.
set(ptree,"/camera/rgb/image_raw/compressed/format","jpeg") pub = rospublisher("/camera/rgb/image_raw/compressed","sensor_msgs/CompressedImage");
Откройте модель Simulink ®. Эта модель проверяет параметр формата изображения и сравнивает значение со значением uint8 вектор литейного символа, uint8('jpeg') с использованием функционального блока MATLAB ®. Логический выход подается оператору AND с выходом IsNew блока Subscribe, который получает изображение из сети. Если значение параметра является правильным и получено новое сообщение, запускается подсистема «Process Image».
Запустите модель и используйте кнопки в модели, чтобы изменить параметр формата изображения и проверить strcmp функция работает. eq вывод должен быть равен 1, если параметр имеет значение 'jpeg'. Во время работы модели ожидается, что сообщения изображений публикуются в сети.
open_system("rosImageFormatParameter")
Завершите работу сети ROS.
rosshutdown
Shutting down global node /matlab_global_node_09733 with NodeURI http://bat6315glnxa64:38027/ Shutting down ROS master on http://192.168.0.10:58132.
strcmp функция в функциональном блоке MATLAB ® определяется как:
function eq = strcmp(s1, n1, s2) %#codegen
% Convert to proper strings
string1 = char(s1(1:n1));
string2 = char(s2);
eq = strcmp(string1, string2);