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

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

В сетях ROS параметры строк сохраняются как 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 function. Выход 1 означает, что параметры совпадают.
open_system("rosStringParameterCompare") sim("rosStringParameterCompare");

Завершите работу сети ROS.
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.
The 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 function. Когда новое изображение получено от блока 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 ® Function. Логический вывод подается на оператор AND с выходом IsNew блока Subscribe, который выводит изображение из сети. Если значение параметров верно и получено новое сообщение, срабатывает Подсистема «Process Image».
Запустите модель и используйте кнопки в модели, чтобы изменить параметр формата изображения и проверить strcmp функция работает. The 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.
The strcmp функция в блоке MATLAB ® Function определяется как:
function eq = strcmp(s1, n1, s2) %#codegen
% Convert to proper strings
string1 = char(s1(1:n1));
string2 = char(s2);
eq = strcmp(string1, string2);